如何在NGINX上设置反向代理到外部网站(带路径)

时间:2015-12-13 14:18:53

标签: nginx

假设我在ip 111.111.111.111上有一台服务器 在哪个nginx服务器上安装为Web服务器

如果有人访问,我想要 http://111.111.111.111/new

他们应该看到的内容 http://example.github.io/new

有人告诉我可以通过NGINX反向代理或Apache反向代理

配置 sites-enabled / default 的技巧适用于不同端口的本地托管网站,但不适用于外部网站。

我为此做了什么(在服务器111.111.111.111上): 在 / etc / nginx / sites-enabled / default

server {
    listen 80;
    location /new/ {
                proxy_pass http://example.github.io/new;
                proxy_redirect          default;
                proxy_buffering         off;
                proxy_set_header        Host                    $host;
                proxy_set_header        X-Real-IP               $remote_addr;
                proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Protocol    $scheme;
        }
}

我得到了什么: 404

这里没有GitHub Pages网站。

1 个答案:

答案 0 :(得分:0)

GitHub Pages允许存储库所有者将域与该存储库相关联,并通过确保域的A / CNAME记录指向GitHub进行验证。

如果您将整个域指向该GitHub页面,则不需要反向代理,因为A记录将准确地将您的域指向GitHub Pages。

您的配置旨在仅反向代理您域的目录,而不是整个域。但是,您正在设置主机标头以匹配客户端要求的主机标头。结果,GitHub Pages正在检查该存储库是否配置为以111.111.111.111接收流量,但不是。这就是为什么会收到404错误的原因-没有与该存储库和主机组合匹配的GitHub Pages配置。

将proxy_set_header中的Host标头更改为example.github.io,这样,即使客户端请求了111.111.111.111,GitHub也将请求作为example.github.io接收到。