Nginx 规则仅重定向特定 https link
Nginx rule to redirect specific https link only
我配置了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 块的这条规则之后,return 301 https://$host/myapp1/;
它的工作就像魅力一样,但前提是我打开 http 页面。
当我打开link时,rp.mydomain.com
。重定向工作正常,应用程序也工作正常。 http 请求被重定向到 https,我可以通过我的应用程序登录。
但是,当我浏览 https://rp.mydomain.com
时,由于 listen 443
.[=24 中的 proxy_pass
规则,我最终出现在 <local ip address>
的空白页=]
我的要求是每当生成页面的特定请求时,即 https://rp.mydomain.com
,它都会重定向到 https://rp.mydomain.com/myapp1/
(就像用户通过 [=20 访问页面时那样) =]) 但其他请求,如 https://rp.mydomain.com/myapp1/
或 https://rp.mydomain.com/myapp1/profile
[etc etc] 不受影响。
只有一个特定页面 https://rp.mydomain.com
会自动重定向。
可以吗?请帮我解决这个问题。
谢谢。
尝试:
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/
的映射。要在浏览器中更改 URL,请使用 permanent
而不是 last
。有关详细信息,请参阅 this document。
您将需要添加额外的 proxy_redirect
语句以防止您的 本地 IP 地址 在应用程序执行重定向时泄露。有关详细信息,请参阅 this document。
假定您的 SSL 证书是在外部块中定义并继承的。
我配置了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 块的这条规则之后,return 301 https://$host/myapp1/;
它的工作就像魅力一样,但前提是我打开 http 页面。
当我打开link时,rp.mydomain.com
。重定向工作正常,应用程序也工作正常。 http 请求被重定向到 https,我可以通过我的应用程序登录。
但是,当我浏览 https://rp.mydomain.com
时,由于 listen 443
.[=24 中的 proxy_pass
规则,我最终出现在 <local ip address>
的空白页=]
我的要求是每当生成页面的特定请求时,即 https://rp.mydomain.com
,它都会重定向到 https://rp.mydomain.com/myapp1/
(就像用户通过 [=20 访问页面时那样) =]) 但其他请求,如 https://rp.mydomain.com/myapp1/
或 https://rp.mydomain.com/myapp1/profile
[etc etc] 不受影响。
只有一个特定页面 https://rp.mydomain.com
会自动重定向。
可以吗?请帮我解决这个问题。
谢谢。
尝试:
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/
的映射。要在浏览器中更改 URL,请使用 permanent
而不是 last
。有关详细信息,请参阅 this document。
您将需要添加额外的 proxy_redirect
语句以防止您的 本地 IP 地址 在应用程序执行重定向时泄露。有关详细信息,请参阅 this document。
假定您的 SSL 证书是在外部块中定义并继承的。