使用 Nginx 将 https 请求转发到 http

使用 Nginx 将 https 请求转发到 http

我正在尝试在服务器 A(Ubuntu 22.04)上使用 Nginx 来:

  1. 强制客户端使用https
  2. 将请求转发到服务器 B(也是 Ubuntu 22.04),以便它们http唯一。它有一个 Apache2 Web 服务器,用于提供来自 WordPress 的页面。

我觉得这听起来有点奇怪,但服务器 A 和服务器 B 在物理上紧挨着。服务器 B 位于公司防火墙后面,因此其任何端口 (80/443) 都无法从外部访问。到目前为止,我无法使用 Let's Encrypt 设置证书,因为服务器 B 必须有一个可以从外部验证的域名。

服务器 A 可从外界访问(端口 80/443)。

而且坦率地说,所提供的网页从来不会要求用户提供个人信息——信用卡、密码或任何个人信息。所以,实际上,这https也许是不必要的。但我知道有些用户可能将他们的网络浏览器设置为仅使用https连接。所以,我们的动机是不要让访问我们网站的访问者过于担心,因为他们没有在地址栏旁边看到挂锁。

无论如何,我认为服务器 B 的配置没问题。至少内部测试似乎没问题,不过我可能会在本地进行额外的测试。我担心服务器 A 的 Nginx 配置,因为我对 Nginx 不太熟悉。

目前,其部分配置如下,其中123.123.123.123是服务器 B 的 IP 地址(因为它没有域名)。配置文件中还有其他站点,这些站点是由我工作中的前任设置的,他对 Nginx 更了解。所以,我假设他所做的一切都是正确的,只有我添加了这两个新部分才是错误的。

http {
  server {
    listen 80 ;
    server_name example.com ;

    rewrite ^(.*) https://$server_name$request_uri permanent;
  }

  server {
    listen 443 ssl ;
    server_name  example.com ;
    error_log /var/log/nginx/example-ssl.log ;

    ssl_certificate      /cert/fullchain.pem ;
    ssl_certificate_key  /cert/privkey.pem ;

    location / {
      proxy_redirect off ;
      proxy_pass http://123.123.123.123:80 ;
      proxy_set_header Host $host ;
      proxy_set_header X-Real-IP $remote_addr ;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
    }
  }
}

上述方法不起作用。老实说,我尝试了很多选项,但我记不清它们是什么样子的。我认为网页只是无法加载。

较新的选项监听端口 80 并将其直接转发到http://123.123.123.123:80。这导致了循环。我没有在这个问题中发布这一点,因为我认为上面的内容可能更接近实际情况。

考虑到后端服务器位于防火墙后面(我无法降低或控制防火墙),我想知道我所做的是否有意义。如果有意义,那么上述 Nginx 配置是否正确?

先感谢您!

相关内容