如何在 nginx 上设置代理?

如何在 nginx 上设置代理?

我该如何设置我的网络服务器按照下面描述的方式工作?

  • Http 请求:mypublic.com ---> nginx 正常处理,因为它已经设置好了(listen 80;

  • Http 请求:myprivate.com ---> 由 apache 处理,设置为在 8080 上工作(listen 8080

我想避免在浏览器中输入地址时包含端口,nginx 上的某种模型(代理?/squid?)。两个域都指向我的机器并按命名设置。

答案1

使用 nginx,您可以通过配置两个虚拟服务器并将其中一个通过 proxy_pass 传递给在端口 8080 上运行的 Apache 来实现此目的:

server {
    listen 80;
    server_name mypublic.com;
    ...
}

server {
    listen 80;
    server_name myprivate.com;

    location / {
        proxy_pass http://myprivate.com:8080;
    }
}

请参阅此处的文档:

答案2

您不能直接使用 DNS 执行此操作,因为 DNS 不处理端口。

您可以在端口 80 上使用某种形式的代理,将请求传递到端口 8080。Apache 的一个示例可能是

<VirtualHost *:80>
    Servername contoso.com
    .
    .
    .
</VirtualHost>

<VirtualHost *:80>
    Servername apache.contoso.com
    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            allow from all
    </Proxy>         
    ProxyPreserveHost On
    ProxyPass / http://contoso.com:8080/
    ProxyPassReverse / http://contoso.com:8080/     

</VirtualHost>

答案3

您可以使用 apache2mod_rewrite.您可以定义适当的条件和规则来重写请求的URL。

答案4

对于 nginx,为 myprivate.com 创建一个虚拟主机,并将其传递给配置为在端口 8080 上监听 myprivate.com 的 apache

服务器 { 监听 80; 服务器名称 myprivate.com;

# proxy it to Apache listening on 127.0.0.1:8080

location / {
    proxy_pass   http://127.0.0.1:8080;
}

}

那就可以了。

然后在 apache 上创建一个虚拟主机来监听 myprivate.com。

相关内容