Nginx 反向代理无法加载 HTTPS 站点

Nginx 反向代理无法加载 HTTPS 站点

今天是我第一次使用 Nginx。我按照一些指南将其设置为专用反向代理。这就是我试图重新创建的 -http://www.integratedwebsystems.com/wp-content/uploads/2010/06/reverse_proxy.jpg

我使用端口 80 时运行良好,但通过 HTTPS 加载的任何内容都会出现 HTTP 内容不安全的错误。尝试通过互联网通过反向代理加载任何 HTTPS 站点看起来非常错误。内部加载则正常。

例子 -https://i.stack.imgur.com/90Mfc.png- 那应该是 Wordpress 管理控制台,它看起来像 90 年代的东西。

以下是我正在使用的 nginx 配置 -

server {
   listen 80;
   server_name domain1.com;
   location / {
      proxy_pass http://192.168.1.149/;
      proxy_set_header Host $host;
   }
}

# HTTPS server

server {
    listen 443 ssl;
    server_name domain1.com;

    error_log /tmp/error.log;

        ssl on;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_certificate /etc/nginx/ssl/server.crt;


    location / {
        proxy_pass http://192.168.1.149/;
        proxy_set_header Host $host;
    }
}

有人能告诉我我需要做什么才能让 HTTPS 通过反向代理正常工作吗?

答案1

您没有遗漏任何东西;您已正确配置 nginx。

这里的问题是 WordPress 认为它​​应该生成 HTTP 链接。当您尝试通过 HTTPS 访问它时,它仍然会生成所有链接,http://因此无法加载它们(除非在浏览器中明确加载不安全的内容)。

如果您想要这样做,可以使用 WordPress 插件将您的管理控制台转换为 https。您还可以编辑博客的常规设置,快速轻松地将整个网站转换为 https,无需插件。

答案2

如果经济条件允许的话,你可以尝试重新加密流量:

location / {
    proxy_pass https://192.168.1.149/;
    proxy_set_header Host $host;
}

显然,应用服务器将会意识到 SSL。

另一种方法是配置备用 Apache 端口,例如

location / {
    proxy_pass http://192.168.1.149:444/;
    proxy_set_header Host $host;
}

使用虚拟主机设置适当的标志,使 Wordpress/PHP 相信该请求实际上已被加密,例如

SetEnv SSL=on

捕捉所有必要/充分的设置可能会很棘手。

相关内容