在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文是基于 location 的匹配末尾是否配置 一、Nginx location 基本配置1.1、Nginx 配置文件upstream test1{ server 127.0.0.1:8000; } upstream test2{ server 127.0.0.1:8000; } server{ server_name test.com; listen 80; access_log /usr/local/openresty/nginx/logs/test.com_access.log latest; error_log /usr/local/openresty/nginx/logs/test.com.log error; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 3s; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_next_upstream error timeout invalid_header http_404 http_502 http_504 http_500; location /user/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1/; } location / { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test2/; } } 1.2 、Python 脚本python2 可以运行 该脚本用于获取请求内容。 这个作为后端,也就是 proxy_pass 代理的后端。 #!/usr/bin/env python import SimpleHTTPServer import SocketServer PORT = 8000 class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): print(self.headers) self.send_response(200, "") def do_POST(self): print(self.headers) content_length = self.headers.getheaders('content-length') length = int(content_length[0]) if content_length else 0 print(self.rfile.read(length)) self.send_response(200, "") Handler = GetHandler httpd = SocketServer.TCPServer(("", PORT), Handler) httpd.serve_forever() 二、测试2.1、测试 location末尾存在 nginx配置如下 location /user/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1/; } 请求url
后端内容 打印的内容: Host: test1 Content-Length: 0 User-Agent: PostmanRuntime/7.26.8 Accept: */* Postman-Token: f2bfe770-4f44-4ee9-91c4-060f59dfb26c Accept-Encoding: gzip, deflate, br 127.0.0.1 - - [10/Apr/2021 16:54:26] "POST /test.html HTTP/1.1" 200 - 小结论:proxy_pass 地址加了 2.2、测试 location末尾存在 nginx配置如下 location /user/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1; } 请求url
后端内容 打印的内容:
小结论: proxy_pass 地址不加了 2.3、测试三 location不加末尾 nginx配置如下 location /user { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1; } 请求url
后端内容 打印的内容:
请求 2.4、location 不加末尾 nginx配置如下 location /user { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1/; } 请求url
后端内容 打印的内容:
请求 2.5、location 末尾有 nginx配置如下 location /user/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1/haha/; } 请求url
后端内容 打印的内容:
请求 2.6、 location 末尾有 nginx配置如下 location /user/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://test1/haha; } 请求url
后端内容 打印的内容:
请求 三、总结
|
序号 | 访问URL | location配置 | proxy_pass配置 | 后端接收的请求 | 备注 |
---|---|---|---|---|---|
1 | test.com/user/test.html | /user/ | http://test1/ | /test.html | |
2 | test.com/user/test.html | /user/ | http://test1 | /user/test.html | |
3 | test.com/user/test.html | /user | http://test1 | /user/test.html | |
4 | test.com/user/test.html | /user | http://test1/ | //test.html | |
5 | test.com/user/test.html | /user/ | http://test1/haha/ | /haha/test.html | |
6 | test.com/user/test.html | /user/ | http://test1/haha | /hahatest.html |
在日常的web网站部署中,经常会用到 nginx
的 proxy_pass
反向代理,有一个配置需要弄清楚:配置 proxy_pass
时,
upstram_name
后面出现了 /
,相当于是绝对根路径,则 nginx
不会把 location
中匹配的路径部分代理走;/
,则会把匹配的路径部分也给代理走。到此这篇关于Nginx location 和 proxy_pass路径配置详解的文章就介绍到这了,更多相关Nginx location 和 proxy_pass路径配置内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界!
请发表评论