Nginx之proxy_pass指令url反斜杠作用

本文详细解析了在Nginx配置中使用proxy_pass指令时,不同URL模式对代理转发的影响,包括绝对路径、相对路径及特殊情况下URL的处理方式。

在nginx中配置proxy_pass代理转发时,其后面的url中反斜杠/ 的匹配处理时常出现意想不到的问题发生,以下说明两种情况:
(1)如果在proxy_pass后面的url加/,表示绝对根路径;
(2)如果在proxy_pass后面的url没有/,表示相对路径,把匹配的路径部分也给代理走。

下面六种情况分别用 http://127.0.0.1/proxy/test.html 进行访问测试

第一种情况:

location /proxy/ {
        proxy_pass http://127.0.0.1/;
}

最终会被代理到URL:http://127.0.0.1/test.html

第二种情况(相对于第一种,最后少一个 / ):

location /proxy/ {    
    proxy_pass http://127.0.0.1;    
}

最终会被代理到URL:http://127.0.0.1/proxy/test.html

第三种情况:

location /proxy/ {    
    proxy_pass http://127.0.0.1/aaa/;    
}

最终会被代理到URL:http://127.0.0.1/aaa/test.html

第四种情况(相对于第三种,最后少一个 / ):

location /proxy/ {    
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL:http://127.0.0.1/aaatest.html

* 第五种情况(定义了一个正则表达式,那么在URl部分没有转换发生):

location ~ ^/proxy/ {    
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL:http://127.0.0.1/proxy/test.html

最佳写法为:

location ~ ^/proxy/ {    
    proxy_pass http://127.0.0.1;    
}

* 第六种情况(有rewrite规则改变URl,那也不会发生转换):

location /proxy/ { 
            rewrite   /proxy/(.*)$   /index.php?page=$1 break;    # break标记用于立即停止rewrite模块的所有指令
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL:http://127.0.0.1/index.php?page=test.html

最佳写法为:

location /proxy/ { 
            rewrite   /proxy/(.*)$   /index.php?page=$1 break;
    proxy_pass http://127.0.0.1;    
}
处理方法应该放到下方nginx的哪里 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; client_max_body_size 500m; proxy_connect_timeout 6000; #nginx后端服务器连接超时时间(代理连接超时)默认60s proxy_read_timeout 6000; #后端服务器数据回传时间(代理发送超时)默认值60s proxy_send_timeout 6000; #连接成功后,后端服务器响应时间(代理接收超时)默认值60s gzip on; # 默认off,是否开启gzip gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; upstream local{ server 127.0.0.1:8080; } upstream mykj{ server 117.50.157.124:12015; } server { listen 8081; server_name test; root html; location ^~ /szkd{ try_files $uri $uri/ /szkd/index.html; } location ^~ /jzxtStore{ try_files $uri $uri/ /jzxtStore/index.html; } location ^~ /jzxtMember{ try_files $uri $uri/ /jzxtMember/index.html; } location ^~ /zhdj{ try_files $uri $uri/ /zhdj/index.html; } location ^~ /zhdj_web{ try_files $uri $uri/ /zhdj_web/index.html; } location ^~ /bxt{ try_files $uri $uri/ /bxt/index.html; } location ^~ /mt{ try_files $uri $uri/ /mt/index.html; } location ^~ /dlaq{ try_files $uri $uri/ /dlaq/index.html; } location ^~ /yjgl{ try_files $uri $uri/ /yjgl/index.html; } location ^~ /zjgl{ try_files $uri $uri/ /zjgl/index.html; } location ^~ /zdxm{ try_files $uri $uri/ /zdxm/index.html; } location ^~ /sxcb{ try_files $uri $uri/ /sxcb/index.html; } location ^~ /sjsj{ try_files $uri $uri/ /sjsj/index.html; } location ^~ /hwtp{ try_files $uri $uri/ /hwtp/index.html; } location ^~ /pcmanager{ try_files $uri $uri/ /pcmanager/index.html; } location ^~ /appuser{ try_files $uri $uri/ /appuser/index.html; } location ^~ /pcuser{ try_files $uri $uri/ /pcuser/index.html; } location ^~ /eipmobile{ try_files $uri $uri/ /eipmobile/index.html; } location ^~ /tyhj{ try_files $uri $uri/ /tyhj/index.html; } location ^~ /tzxm{ try_files $uri $uri/ /tzxm/index.html; } location ^~ /ggzx{ try_files $uri $uri/ /ggzx/index.html; } location ^~ /eipform{ try_files $uri $uri/ /eipform/index.html; } location ^~ /gbqxj{ try_files $uri $uri/ /gbqxj/index.html; } location ^~ /ckgl{ try_files $uri $uri/ /ckgl/index.html; } location ^~ /api { proxy_pass http://local/eip/api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /mobile/dd { proxy_pass http://local/eip/mobile/dd; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /url { proxy_pass http://local/eip/url; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /application-resource { proxy_pass http://local/eip/application-resource; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /system/servicepack { proxy_pass http://mykj/mykj/system/servicepack; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /sys/core/file { proxy_pass http://mykj/mykj/sys/core/file; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /scripts { proxy_pass http://local/eip/scripts; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 8082; server_name test; root html/zcgl; location /api { proxy_pass http://local/eip/api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /mobile/dd { proxy_pass http://local/eip/mobile/dd; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /url { proxy_pass http://local/eip/url; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /application-resource { proxy_pass http://local/eip/application-resource; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /system/servicepack { proxy_pass http://mykj/mykj/system/servicepack; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /sys/core/file { proxy_pass http://mykj/mykj/sys/core/file; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 8083; server_name test; root html/mygw_web; location /api { proxy_pass http://local/eip/api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /mobile/dd { proxy_pass http://local/eip/mobile/dd; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /url { proxy_pass http://local/eip/url; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /system/servicepack { proxy_pass http://mykj/mykj/system/servicepack; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /sys/core/file { proxy_pass http://mykj/mykj/sys/core/file; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /eip { add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' *; add_header 'Access-Control-Allow-Headers' *; proxy_pass http://local/eip; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_redirect http:// https://; } } server { listen 8084; server_name test; root html/mygw; location /api { proxy_pass http://local/eip/api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /mobile/dd { proxy_pass http://local/eip/mobile/dd; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /url { proxy_pass http://local/eip/url; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /system/servicepack { proxy_pass http://mykj/mykj/system/servicepack; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /sys/core/file { proxy_pass http://mykj/mykj/sys/core/file; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /eip { add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' *; add_header 'Access-Control-Allow-Headers' *; proxy_pass http://local/eip; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_redirect http:// https://; } } server { listen 8087; server_name test; root html/mobile; location /api { proxy_pass http://local/eip/api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /mobile/dd { proxy_pass http://local/eip/mobile/dd; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /url { proxy_pass http://local/eip/url; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /system/servicepack { proxy_pass http://mykj/mykj/system/servicepack; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /sys/core/file { proxy_pass http://mykj/mykj/sys/core/file; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /eip { add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' *; add_header 'Access-Control-Allow-Headers' *; proxy_pass http://local/eip; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_redirect http:// https://; } } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} server { listen 443 ssl; # 监听HTTPS默认端口443 server_name localhost; # 与证书中的Common Name一致 # 证书路径 ssl_certificate ssl/certificate_request.csr; ssl_certificate_key ssl/public_key; # 可选:SSL优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384; # 本地项目根目录 root /path/to/your/project; index index.html; } # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
最新发布
10-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值