Nginx反向代理一般情况下指代理服务器接受互联网上的连接请求,然后将请求的内容转发到目标服务器上,目标服务器上的请求再通过代理服务器返回到客户端;这种方式能让真正的业务服务器不能直接通过公网的方式请求到,只能通过代理服务器代理之后再请求服务器。
Nginx设置反向代理
首先设置一个HTML静态页面
<html>
<body><p>Test Nginx Proxy</p></body>
</html>
然后保存到/www/127.0.0.1/目录下,保存文件名为index.html
设置网站配置文件
server {
#端口设置成81,等会反向代理设置的时候代理成80端口
listen 81;
#主机名可以设置成IP地址
server_name 127.0.0.1;
location / {
root /www/127.0.0.1/;
index index.html index.htm;
}
}
systemctl restart nginx
#记住要重启Nginx才可以生效配置文件
设置完之后使用curl命令获取页面参数
curl http://127.0.0.1:81
这是curl之后的结果
下面设置反向代理的参数
首先在hosts文件内设置一个域名对应的参数(等会要用到)
设置一个根本不会撞到的域名 www.nginx.test
nano /etc/hosts
127.0.0.1 www.nginx.test
然后设置反向代理站的配置文件
server {
listen 80;
server_name www.nginx.test;
location / {
#设置反向代理
proxy_pass http://127.0.0.1:81;
}
}
重启Nginx服务器,curl http://www.nginx.test 查看返回结果
查看返回结果可以看出,反向代理之后自动转发到127.0.0.1地址的80端口上,实现了服务器代理访问HTTP服务
同理,在反向代理的时候开启强制HTTPS访问,网站虽然经过了反向代理,隐藏了真实的服务器IP地址,但是数据传输还是会以明文的方式传送到代理服务器上;将上述反向代理文件小改
server {
#监听80端口和443端口
listen 80;
listen 443 ssl;
#设置网站的名称
server_name www.nginx.test;
#设置SSL证书和SSL密钥的位置(绝对路径)
ssl_certificate /crt/www.nginx.test/www.nginx.test.crt;
ssl_certificate_key /crt/www.nginx.test/www.nginx.test.key;
#设置超时5分钟
ssl_session_timeout 5m;
#配置ssl_session缓存
ssl_session_cache shared:SSL:5m;
#配置SSL协议1.1 1.2 1.3
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
#设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写
if ($scheme = http) {
return 301 https://$host$request_uri;
}
location / {
#设置反向代理
proxy_pass http://127.0.0.1:81;
}
}
保存退出后重启Nginx服务
systemctl restart nginx
使用curl命令尝试是否被强制301到HTTPS上
然后使用curl命令请求SSL页面(需要-k参数忽略安全性)
curl -k https://www.nginx.test
HTTPS请求结果
评论