我已将nginx配置为反向代理工具。我遇到了一个我无法处理的问题。以下是我在.conf文件中设置的规则。
server {
listen 80;
server_name rp.mydomain.com;
return 301 https://$host/myapp1/;
location / {
proxy_pass <local ip address>;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect http://$host https://$host;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name rp.mydomain.com;
location / {
proxy_pass <local ip address>;
proxy_redirect http:// https://;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_ssl_session_reuse on;
}
}
我的应用程序驻留在/ myapp1 /。我没有在proxy_pass中写/ myapp1 /的原因[我试过]是因为当我尝试登录页面时重定向无法正常工作。我找不到错误页面。
但是在侦听80块之后,返回301 https://$host/myapp1/;
它的工作方式就像魅力一样,但只有当我打开http页面时才会这样。
当我打开链接时,rp.mydomain.com
。重定向工作正常,应用程序也正常工作。 http请求被重定向到https,我可以通过我的应用程序登录。
但是,当我浏览https://rp.mydomain.com
时,由于<local ip address>
中的proxy_pass
规则,我最终会转到listen 443
的空白页。
我的要求是,只要生成页面的特定请求,即https://rp.mydomain.com
,就会将其重定向到https://rp.mydomain.com/myapp1/
(就像用户通过http://rp.mydomain.com
访问页面时一样)但其他请求,如https://rp.mydomain.com/myapp1/
或https://rp.mydomain.com/myapp1/profile
[等等]不受影响。
只有一个特定页面https://rp.mydomain.com
会自动重定向。
有可能这样做吗?请帮我解决这个问题。
谢谢。
答案 0 :(得分:1)
尝试:
server {
listen 80;
server_name rp.mydomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name rp.mydomain.com;
location = / {
rewrite ^ /myapp1/ last;
}
location / {
proxy_pass <local ip address>;
proxy_redirect http:// https://;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_ssl_session_reuse on;
}
}
已添加location = /
块以创建从/
到/myapp1/
的映射。要更改浏览器中的网址,请使用permanent
代替last
。有关详细信息,请参阅this document。
当应用程序执行重定向时,您需要添加其他proxy_redirect
语句以防止本地IP地址泄漏。有关详细信息,请参阅this document。
假设您的SSL证书在外部块中定义并继承。