Nginx规则仅重定向特定的https链接

时间:2017-03-13 03:46:18

标签: nginx url-redirection reverse-proxy

我已将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会自动重定向。

有可能这样做吗?请帮我解决这个问题。

谢谢。

1 个答案:

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