Nginx 服务器 (四)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43608153/article/details/92155984

上篇文章介绍了nginx静态虚拟配置的实现,而在实际项目中,情况都比较复杂。

项目nginx实用需求:
通过浏览器浏览获取数据,内部通过nginx实现端口转发,实现数据的传输实现。(通过浏览器访问192.168.11.27:9000, nginx转发到1010端口,返回数据)

毫无疑问,要想实现此功能,nginx.conf 配置文件才是我们操作的核心。关于端口转发的相关资料,nginx 中文文档中也有,这里就不做介绍了,直接贴代码了。

注意:
注意:
注意:本次例子中,用户请求存放在系统的 /usr/share/nginx/www/test.txt 路径下。

 server{
                listen 9000;
                server_name mytest001;

                access_log /var/log/nginx/access.9000.log;
                proxy_set_header Host $host:$server_port;

                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Real-Port $remote_port;
                proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
                proxy_set_header Via "nginx";

                #set config of websocket
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                location /usr {
                        proxy_pass http://192.168.11.127:1010; 
                }
        }
        server{
                listen 1010;
                server_name mytest;

                access_log /var/log/nginx/access.1010.log;


                location / {
                        root /;
                        index index.html index.htm;
                }
        }

在这里需要注意的是:

  1. 转发书写规则

    location /usr {
                        proxy_pass http://192.168.11.127:1010; 
                }
    

    当nginx检测到 192.168.11.127:9000/usr 时, 就会自动将该url转发到 192.168.11.127:1010/usr

  2. 路经要使得源端口与转发端口转化后路径一致
    当上一章我们在设置虚拟静态路径时,将监听端口1010 的root 设置为了 /usr/share/nginx/www, 所以,我们可以通过
    url:192.168.11.127:1010/test.txt 直接就能到test.txt 文件。
    在这里插入图片描述

    然而当不更改监听端口为1010的root路径时,我们通过url:192.168.11.127:9000/usr /test.txt 想要访问text.txt 文件,然而却返回404.
    在这里插入图片描述
    根据抓包和查看log文件可以得知,尽管nginx将来自9000端口的数据转发到了1010端口,但是实际请求数据为 /usr/test.txt, 所以端口1010端口收到的url 仅仅为/usr/test.txt,而并不是nginx根据静态路径转换到的 /usr/share/nginx/www/test.txt, 所以,根据实际的url (/usr/test.txt)是无法访问到test.txt 的,所以系统会返回404.

    在这里插入图片描述

    为了解决路径问题,我们可以采用统一的采用跟路径为基准路径的方法,规范url中路径为绝对路径,这样就可以使得数据能够正常被访问。

    所以,修正端口1010的root路径为 / ,可以通过url: 192.168.11.127:1010/usr/share/nginx/www/test.txt 来访问数据, 而当通过9000端口时(url: 192.168.11.127:9000/usr/share/nginx/www/test.txt ),nginx将来自9000端口的路径 /usr/share/nginx/www/test.txt 转发给1010端口,故1010端口收到的路径为 /usr/share/nginx/www/test.txt ,故能正常访问到test.txt中的数据。

验证:
根据上文中的nginx.conf文件,重新加载后(nginx -s reload), 通过浏览器和postman两个工具做测试

当访问端口为1010时,浏览器访问结果如下:
在这里插入图片描述
当访问端口为1010时,postman访问结果如下:
在这里插入图片描述

当访问端口为9000时,浏览器访问结果如下:
在这里插入图片描述
当访问端口为9000时,postman 访问结果如下:
在这里插入图片描述

至此,nginx的反向代理功能已经梳理通,剩下的工作就是根据项目需求实现数据的传递了。

猜你喜欢

转载自blog.csdn.net/weixin_43608153/article/details/92155984
今日推荐