首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止重定向到https和URI hacks反向代理

防止重定向到https和URI hacks反向代理
EN

Stack Overflow用户
提问于 2017-10-12 09:30:44
回答 1查看 1.4K关注 0票数 0

我在服务器上设置了一个反向代理,其中包含了nginx,从那时起,所有请求都重定向到https,尽管我没有将所有位置都设置为https重定向。

基本上,我想要的是能够使用反向代理为https和http提供服务。此外,我还希望能够动态地重定向到不同的URI,例如,我希望将/ be 2/foo/bar的所有路由重定向到/bla2之后的所有路由,我在这里试图获得的是,每当访问example.com/bla2/foo/bar时,应该将其重定向到example.com/foo/bar,而不需要bla2部分.

  1. 在同一个配置文件上有可能吗?
  2. 是什么使我的服务器将所有请求重定向到https?

这是我的服务器nginx.conf

代码语言:javascript
复制
 server {
        listen   443;
        ssl    on;
        ssl_certificate    /etc/ssl/example.com.crt;
        ssl_certificate_key    /etc/ssl/example.com.key;


        listen     80;
        server_name  example.com;

        location /bla/bla {
                proxy_pass http://example.com:3980/foo/bar1;
        }

        **location /bla2/**{
               # proxy_pass http://example.com:3004;
                return 301 http://example.com:3004$request_uri;

                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_redirect off;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /app3 {
                rewrite ^/app3(.*) /$1 break;
                proxy_pass http://example.com:1236/app3;
        }
}

如果我将http://example.com:3004放在浏览器中而不重定向到https,我希望能够直接获取它的内容。只有当我尝试访问example.com/bla2时,我才希望它是必需的https而不是http,并且被重定向到不同的路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 18:07:44

为此,需要使用正则表达式和捕获组。

代码语言:javascript
复制
location ~* /bla2/(.*) {
    return 301 http://example.com:3004$1$is_args$args;
}

另一种方法是使用重写。

代码语言:javascript
复制
rewrite ^/bla2/(.*)$ http://example.com:3004/$1 redirect;

如果希望透明地将其代理到example.com:3004删除/bla2,则应使用

代码语言:javascript
复制
location /bla2/ {
   proxy_pass http://example.com:3004/;
}

在这里,尾随斜杠//bla2/http://example.com:3004/中非常重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46706089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档