【问题标题】:Nginx rule to redirect specific https link onlyNginx 规则仅重定向特定的 https 链接
【发布时间】:2017-03-13 16:43:08
【问题描述】:

我已将 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 时,我最终会进入&lt;local ip address&gt; 的空白页,因为listen 443 中的proxy_pass 规则。

我的要求是每当生成页面的特定请求时,即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 会自动重定向。

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

谢谢。

【问题讨论】:

    标签: nginx url-redirection reverse-proxy


    【解决方案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/ 的映射。要更改浏览器中的 URL,请使用 permanent 而不是 last。详情请见this document

    您需要添加额外的proxy_redirect 语句以防止您的本地IP 地址在应用程序执行重定向时泄漏。详情请见this document

    假设您的 SSL 证书在外部块中定义并被继承。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多