Nginx转发代理,无需重定向

cqoc49vn  于 2023-04-20  发布在  Nginx
关注(0)|答案(1)|浏览(275)

为了解决一些CORS问题,我想配置我现有的nginx服务器来代理请求。例如,如果我的服务器是https://proxy.example.com,我希望能够使用像https://proxy.example.com/google.com这样的URL来获取页面和/或内容。
我遇到的问题是Nginx似乎给了我301重定向,而不是真正代理请求。这不会做,因为它受到与我开始时完全相同的CORS限制。我需要内容通过我的代理,而不是重定向客户端。
这是我目前正在使用的配置。我的Nginx知识非常有限,所以除了我眼前的问题之外,肯定有一些奇怪/不正确的东西:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name proxy.example.com;

    # Strips leading / from request path
    location ~ ^/(.*)$ {
        # Needs to come first
        add_header Access-Control-Allow-Origin *;

        resolver 8.8.8.8;
        proxy_pass http://$1$is_args$args;
    }
}

我已经做了相当多的阅读,有各种各样的建议选项和标题(proxy_redirectHostX-Forwarded-For等),但它们似乎都没有任何积极的影响(一对夫妇似乎导致Cloudflare的问题,当代理网站使用它时)。

bwntbbo3

bwntbbo31#

所以问题是传入的请求是https,但proxy_pass只是http。我这样做是因为我遇到了SSL错误,并认为这是一个快速解决方案,但事实证明有一个选项可以解决这个问题:

proxy_ssl_server_name on;

一旦我添加了这个,我就可以改变proxy_pass的值来使用https,然后客户端就不再被重定向了。完整配置:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name proxy.example.com;

    # Strips leading / from request path
    location ~ ^/(.*)$ {
        # Needs to come first
        add_header Access-Control-Allow-Origin *;

        resolver 8.8.8.8;
        proxy_pass https://$1$is_args$args;
        proxy_ssl_server_name on;
    }
}

相关问题