记一次Nginx的反向代理和https的配置

前两天大学室友大佬明跟我说,xx,我有项目要做借用你的80端口用几天,随后各种骚操作(后来据说是用iptables转的)把整台服务器80端口全部转走到8080,由于我的blog走的http所以导致我的blog直接也挂掉了!此时想到办法就是用Nginx配置二级域名做一次反向代理。

Nginx—-世界上最好用的反向代理服务器。

首先先到域名后台配置一个二级域名的A记录解析,例如:cem.realyoung.cc 没有域名的话直接用ip地址
二级域名

然后在服务器上添加一个 vhost
添加vhost.png

这里我直接用的二级域名做解析,想用ip地址 直接把vhost的
domain 写成ip地址即可

随后配置该 vhost 的Nginx配置文件,配置如下

upstream cem {
    server 127.0.0.1:8080;
}
server {
  listen 80;
  server_name cem.realyoung.cc;
  access_log off;
  index index.html index.htm index.php;

  #error_page 404 /404.html;
  #error_page 502 /502.html;

  location / { 
    proxy_pass http://cem;
    proxy_set_header Host $host;

    }
}

由于是直接代理到本机,便是127.0.0.1:8080,小伙伴们可以尝试代到别的主机试试,随后确认安全组开启8080,重启Nginx:nginx -s reload,浏览器输入二级域名,搞定!


此外,觉得这次80端口被截走也太扯了,换个思路,把网站顺便升级到 https(记得安全组要开启443端口),EFF(电子前哨基金会)为了推广https协议,成立了一个项目并且免费发放证书!开发者的福音啊!点击跳转到该项目的github地址,我们需要做的就是把它 clone 下来

git clone https://github.com/certbot/certbot.git

随后先停止Nginx,一定要先关掉Nginx nginx -s stop,不然会一直报错!

cd certbot
./certbot-auto certonly --standalone --email yourEmail(你的邮箱!)  -d yourDomain(你的域名)

如果提示没权限的话,请sudo chomd u+x certbot-auto

添加成功
到此出现 Congratulations,便是添加证书成功了,这里还会告诉我们证书的存放地址,默认都是在 /etc/letsencrypt/live 下,你可以拷贝到别的地方或者做一个软链接,这里我暂时就没动它,直接到Nginx里面配置该路径了,并且做了一次301重定向都跳至https,配置如下:

server {
  listen 80;
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/www.realyoung.cc/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.realyoung.cc/privkey.pem;
  server_name www.realyoung.cc;
  access_log /data/wwwlogs/www.realyoung.cc_nginx.log combined;
  index index.html index.htm index.php;

  root /data/wwwroot/www.realyoung.cc;

  include /usr/local/nginx/conf/rewrite/wordpress.conf;
  #error_page 404 /404.html;
  #error_page 502 /502.html;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
if ($host != "www.realyoung.cc") {

    rewrite ^/(.*)$ https://www.realyoung.cc/$1 permanent;
    break;
}

  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}

随后重启Nginx,浏览器输入地址便可看到已经有https了,至此 https 配置结束。
https.png

再记一下踩的一个坑

在配置https的过程中,出现了一次 ERR_SSL_PROTOCOL_ERROR 导致网站一直进不去,后来查明原因是因为我在Server的配置中只写了 listen 443;
解决方法就是添加上 ssl 协议 :listen 443 ssl;

原文地址:https://www.realyoung.cc/realyoung/127.html