我在服务器上设置了一个反向代理,其中包含了nginx,从那时起,所有请求都重定向到https,尽管我没有将所有位置都设置为https重定向。
基本上,我想要的是能够使用反向代理为https和http提供服务。此外,我还希望能够动态地重定向到不同的URI,例如,我希望将/ be 2/foo/bar的所有路由重定向到/bla2之后的所有路由,我在这里试图获得的是,每当访问example.com/bla2/foo/bar时,应该将其重定向到example.com/foo/bar,而不需要bla2部分.
这是我的服务器nginx.conf
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/example.com.crt;
ssl_certificate_key /etc/ssl/example.com.key;
listen 80;
server_name example.com;
location /bla/bla {
proxy_pass http://example.com:3980/foo/bar1;
}
**location /bla2/**{
# proxy_pass http://example.com:3004;
return 301 http://example.com:3004$request_uri;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
}
location /app3 {
rewrite ^/app3(.*) /$1 break;
proxy_pass http://example.com:1236/app3;
}
}如果我将http://example.com:3004放在浏览器中而不重定向到https,我希望能够直接获取它的内容。只有当我尝试访问example.com/bla2时,我才希望它是必需的https而不是http,并且被重定向到不同的路径。
发布于 2017-10-12 18:07:44
为此,需要使用正则表达式和捕获组。
location ~* /bla2/(.*) {
return 301 http://example.com:3004$1$is_args$args;
}另一种方法是使用重写。
rewrite ^/bla2/(.*)$ http://example.com:3004/$1 redirect;如果希望透明地将其代理到example.com:3004删除/bla2,则应使用
location /bla2/ {
proxy_pass http://example.com:3004/;
}在这里,尾随斜杠/在/bla2/和http://example.com:3004/中非常重要。
https://stackoverflow.com/questions/46706089
复制相似问题