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 证书是在外部块中定义并继承的。