我正在尝试在服务器 A(Ubuntu 22.04)上使用 Nginx 来:
- 强制客户端使用
https
。 - 将请求转发到服务器 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 配置是否正确?
先感谢您!