我使用 nginx 作为反向代理,并代理我们的一些网络服务器、应用程序系统等。现在我有一个应用程序,可以通过端口 2222 上的 https 访问。因此,我像对其他系统一样创建了一个重定向。
我的问题是,我无法访问该端口上的应用程序。连接被拒绝。我的防火墙将允许此连接,我们已检查过。Nginx 也正在监听该端口。
Nginx 配置为:
server {
listen 2222;
server_name server.hostname.de;
ssl_certificate /etc/nginx/cert.cer;
ssl_certificate_key /etc/nginx/key.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://server.hostname.de:2222/;
}
}
知道这里可能出了什么问题吗?
提前致谢
答案1
那么,在 Nginx 尝试侦听端口 2222 的同一台机器上,端口 2222 上还有另一个服务?我认为此配置应该拒绝加载,在这种情况下,它会在日志中抱怨。它无法侦听已经侦听的相同地址和端口。或者,您可以观察到它将请求循环代理到自身:它既在侦听端口 2222,又将请求定向到端口 2222(我不知道它会是什么样子,但不要指望有什么好处。)
请同时显示ss -lnpt | grep 2222
以确认正在监听该端口的内容以及哪些 IP 地址。您可以屏蔽民众IP,但最好不要对私人IP做任何事情。
您的服务可能只在本地主机上监听(127.0.0.1
和/或::1
),在这种情况下您还需要将 Nginx 指向本地主机:
proxy_pass https://127.0.0.1:2222/;
更好的是,为了安全起见,避免循环回到同一主机上的同一端口。对后端服务(可能是 2222)和前端代理使用不同的端口(最好让 443 监听 HTTPS,80 监听 HTTP)。此外,使用而不是listen 443 ssl
单独ssl on
(这是过时的方式配置 SSL)。
答案2
这应该是一个评论,但空间有限,格式也是如此......
所以我创建了一个重定向
不,你没有。重定向是完全不同的东西。你配置了一个代理。
连接被拒绝。我的防火墙将允许此连接,我们已检查过。Nginx 也正在监听该端口。
但你不打算告诉我们你是怎么做到的吗?也不打算告诉我们这是在什么操作系统上运行的?
你提出了一系列相互矛盾的断言,但没有提供任何证据来支持它们。
除非你对分割 DNS 做了一些非常奇怪的事情,否则你似乎将 nginx 指向回其自身。
答案3
当然,这是我的配置。
server {
listen 2222;
server_name server.hostname.de;
ssl_certificate /etc/nginx/cert.cer;
ssl_certificate_key /etc/nginx/key.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://server.hostname.de:2222/;
}
}