在网上勉强知道了nginx如何设置反向代理和禁止直接通过IP地址访问。
前者的方法大致是:
server {
listen 80 default_server;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
后者的方法大致是:
server {
listen 80 default;
server_name _;
server_name www.example.com example.com
return 500;
}
可如果把这两个结合到一块,比如这样:
server {
listen 80 default;
server_name _;
server_name www.example.com example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
return 500;
} ,便会导致通过域名和IP地址都无法访问网站。
简书上有一篇讲nginx禁止通过IP访问的文章说是,在原有的nginx.conf文件中增加一个server {...},我试过之后发现这样的配置不合法(nginx -t),nginx根本无法重启。
无奈之下,想出了一个这样的办法:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
#将这两个域名解析到IP地址后,下面这行不需要写
#server_name www.example.com example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
if ($host = 'your server's IP address') {
return 403;
}
}
看着有点怪异,不过算是能满足我的要求了。
另外,如果通过 域名+端口号(网站服务器监听的,比如8080) 或是 IP+端口号 仍然能访问到你的网站,可以去服务器提供商提供的管理页面上禁止外网对该端口的访问。