Nginx反向代理的应用

dkm
dkm
2022-12-12 / 0 评论 / 10 阅读 / 正在检测是否收录...

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之后的结果
Test

下面设置反向代理的参数
首先在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 查看返回结果
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上
Test

然后使用curl命令请求SSL页面(需要-k参数忽略安全性)

  curl -k https://www.nginx.test

HTTPS请求结果
Test

0

评论

博主关闭了所有页面的评论