警告:我是 NGINX 的新手。我使用过 apache2,但在 CentOS 上,我不习惯它的设置方式,而且我想尝试 NGINX,因为它更新、更现代。
编辑:我也用 Apache(httpd) 测试过,但没成功。似乎响应没有正确转发回请求的 IP/客户端。但是当我转发 ssh 时,它工作得很好。使用端口 80,没成功。我只能在本地机器上访问网站。即使是同一网络上的机器也无法访问该网站。
我有一个简单的 VM 解决方案,运行在 VMWare 上。所有 VM 都运行 CentOS 7,并且禁用了 selinux。
VM #1 是网关。它有两个 NIC,eth0 - 内部网络,eth1 - wan。此 VM 还设置了 iptables。我有基本规则,基本上允许所有流量,但阻止一些不需要的流量。此外,还有 NAT 规则用于将所需的 HTTP 和 HTTPs 端口请求转发到内部 VM,如下所示:
*nat
:INPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# HTTP
-A PREROUTING -p tcp -m tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.10.2:80
# HTTPS
-A PREROUTING -p tcp -m tcp -i eth1 --dport 443 -j DNAT --to-destination 10.10.10.2:443
# MySQL
-A PREROUTING -p tcp -m tcp -i eth1 --dport 3306 -j DNAT --to-destination 10.10.10.2:3306
# IMAPs
-A PREROUTING -p tcp -m tcp -i eth1 --dport 993 -j DNAT --to-destination 10.10.10.2:993
# SMTP
-A PREROUTING -p tcp -m tcp -i eth1 --dport 25 -j DNAT --to-destination 10.10.10.2:25
# SMTPs
-A PREROUTING -p tcp -m tcp -i eth1 --dport 465 -j DNAT --to-destination 10.10.10.2:465
-A PREROUTING -p tcp -m tcp -i eth1 --dport 587 -j DNAT --to-destination 10.10.10.2:587
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
VM #2 是 Web 服务器。它运行的是 NGINX。它具有默认配置:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
现在,当我从网关执行 curl 10.10.10.2 时,我得到:
curl: (7) Failed connect to 10.10.10.2:80; No route to host
但 ping 效果很好。
另外,当尝试外部 WAN IP 时,它显示连接被拒绝。
我现在非常困惑,不知道下一步该尝试和测试什么。当我为 ssh 添加 NAT 时,我可以毫无问题地访问它。但这些 HTTP/s 请求不起作用。这是 NGINX 的问题吗?我还需要对防火墙做其他什么操作才能使 NGINX 服务器能够响应 VM 外部的请求吗?
谢谢你!
答案1
好的。所以,我以为 Web 服务器 VM 上的防火墙已被禁用,但事实证明,尽管我停止了该服务,但实际上并没有禁用。我再次停止了它,现在它可以正常工作了。