httpd配置文件

httpd配置文件

我正在开发机器上运行本地 Web 应用。我想从测试机器(手机)访问我的本地 Web 应用。

我设置 Nginx 来监听 8888 端口。我的测试机器可以通过这个端口访问我的开发机器。

应该进入本地 Web 应用程序的请求从端口 8888 反向代理到本地 Web 应用程序端口 3000。这些请求工作正常。

应该发往互联网的请求被转发代理并由 8.8.8.8 解析。但这些请求只能是 HTTP。Nginx 似乎无法处理转发代理 HTTPS 请求。

此 HTTP 设置有效:

server {
        listen 8888;
        listen [::]:8888;

        server_name local.myapp.be myapp.com;

        access_log /var/log/nginx/myapp/access.log;
        error_log  /var/log/nginx/myapp/error.log;

        location / {
                proxy_pass http://local.myapp.be:3000;
                proxy_redirect http://local.myapp.be:3000 $scheme://$host:8888;
                proxy_set_header Host $host;
        }
}

server {
        listen 8888 default_server;
        listen [::]:8888 default_server;

        access_log /var/log/nginx/default/access.log;
        error_log  /var/log/nginx/default/error.log;

        location / {
                resolver 8.8.8.8;
                proxy_pass http://$http_host$uri$is_args$args;
        }
}

然后我尝试删除第二个服务器块并将其添加到 http 块级别的 nginx.conf:

stream {
    resolver 8.8.8.8;
    server {
        listen 8888;
        ssl_preread on;
        proxy_connect_timeout 5s;
        proxy_pass $ssl_preread_server_name:$server_port;
    }
}

但这似乎不起作用。

如何设置 Nginx 代理以正确处理反向代理和正向代理(http 和 https)请求?

答案1

nginx 可以像未加密的 HTTP 一样轻松地代理 TLS,但它无法向您的客户端提供有效的证书!您真的不想在您访问的每个网站上点击证书警告。(有办法实现这一点,但它们非常复杂)。

有2个简单的解决方案。

任何一个:

  1. 放弃 nginx,使用传统的正向代理,如 squid,并添加额外的逻辑来处理重定向应用程序流量(使用 squid,你可以使用URL 重写器

  2. 设置代理 PAC 文件仅将您的应用程序流量转发到 nginx。

答案2

Nginx 不太适合正向代理 https 请求。

我能够使用 Apache HTTPD 设置反向和正向代理:

httpd配置文件

找到Apache httpd的主配置文件httpd.conf并打开该文件。

通过取消注释来加载以下代理模块,例如

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_connect_module lib/httpd/modules/mod_proxy_connect.so
LoadModule proxy_http_module lib/httpd/modules/mod_proxy_http.so

代理配置文件

通过添加对该配置文件的引用来包含代理配置,例如

Include /opt/homebrew/etc/httpd/extra/proxy.conf

将配置文件 proxy.conf 放在 Include 指令指定的路径下。

添加监听指令。

Listen 8888

为对本地资源(例如开发计算机上的 Web 应用程序)的反向代理请求添加 vhost 配置。

<VirtualHost *:8888>
    ServerName reverse.io
    ServerAlias local.myapp.com myapp.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from all
    </Proxy>
    ProxyPass        / "http://local.myapp.com:3000/"
    ProxyPassReverse / "http://local.myapp.com:3000/""
    ProxyTimeout 300
    ErrorLog "/opt/homebrew/var/log/httpd/myapp-reverse-error_log"
    CustomLog "/opt/homebrew/var/log/httpd/myapp-reverse-access_log" common
</VirtualHost>

为对远程资源(例如域、API、互联网上的网站)的正向代理请求添加 vhost 配置。

<VirtualHost *:8888>
    ServerName forward.io
    ServerAlias *
    ProxyRequests On
    ProxyVia On
    <Proxy *>
      Require ip 192.168.0
    </Proxy>
    ErrorLog "/opt/homebrew/var/log/httpd/myapp-forward-error_log"
    CustomLog "/opt/homebrew/var/log/httpd/myapp-forward-access_log" common
</VirtualHost>

结合 listen 指令和两个虚拟主机,你的配置文件看起来应该像这样:

Listen 8888

<VirtualHost *:8888>
    ServerName reverse.io
    ServerAlias local.myapp.com myapp.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from all
    </Proxy>
    ProxyPass        / "http://local.myapp.com:3000/"
    ProxyPassReverse / "http://local.myapp.com:3000/"
    ProxyTimeout 300
    ErrorLog "/opt/homebrew/var/log/httpd/myapp-reverse-error_log"
    CustomLog "/opt/homebrew/var/log/httpd/myapp-reverse-access_log" common
</VirtualHost>

<VirtualHost *:8888>
    ServerName forward.io
    ServerAlias *
    ProxyRequests On
    ProxyVia On
    <Proxy *>
      Require ip 192.168.0
    </Proxy>
    ErrorLog "/opt/homebrew/var/log/httpd/myapp-forward-error_log"
    CustomLog "/opt/homebrew/var/log/httpd/myapp-forward-access_log" common
</VirtualHost>

相关内容