为什么要禁止通过ip访问 {#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E7%A6%81%E6%AD%A2%E9%80%9A%E8%BF%87ip%E8%AE%BF%E9%97%AE}
以下是来自通义千问的回答
通过禁止直接通过IP地址访问,可以防止未授权用户访问网站。这可以减少潜在的安全风险,减少暴露服务器信息的风险,从而降低被攻击的可能性。用户通过域名访问,而不是IP地址,可以增强品牌的识别度,可以提供一致的品牌形象。禁止直接通过IP地址访问可以简化Nginx的配置,减少不必要的复杂性。如果网站可以通过IP地址和域名同时访问,搜索引擎可能会认为这是重复内容,影响SEO排名。通过域名访问可以集中网站的权重,提高搜索引擎排名。
给用户只提供域名这一个打开网站的入口,虽然有了域名再获取服务器ip地址不是什么难事,但也是有门槛的。
当然这么做最重要的是为了安全、安全、 还是TMD安全。
配置允许通过域名访问 {#%E9%85%8D%E7%BD%AE%E5%85%81%E8%AE%B8%E9%80%9A%E8%BF%87%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE}
nginx的配置以及域名的ssl证书相关自行了解,这里不做赘述。
http {
# 其他配置...
# 允许通过域名访问
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 重定向到HTTPS
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.pem; # 确认路径正确
ssl_certificate_key /etc/nginx/ssl/example.com.key; # 确认路径正确
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
client_max_body_size 100m;
location / {
root html;
index index.html index.htm;
proxy_pass http://xxxxxxxxx;
}
}
`}`
配置禁止通过ip地址直接访问 {#%E9%85%8D%E7%BD%AE%E7%A6%81%E6%AD%A2%E9%80%9A%E8%BF%87ip%E5%9C%B0%E5%9D%80%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE}
这两个server块是听过监听80和443端口,当用户通过ip地址直接访问时返回500。
# 禁止通过IP地址直接访问
server {
listen 80 default_server;
server_name _;
return 500;
}
`server {
listen 443 ssl default_server;
server_name _;
# 提供一个通用的证书
ssl_certificate /etc/nginx/cert/default.crt;
# 提供一个通用的密钥
ssl_certificate_key /etc/nginx/cert/default.key;
return 403;
}`
需要注意的是,443的server块中需要配置一个通用的证书和密钥,可通过以下命令生成。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert/default.key -out /etc/nginx/cert/default.crt
其中,/etc/nginx/cert/是生成的证书和密钥的路径,可根据实际情况。
在生成证书时,需要填写一些信息,例如国家、省份、城市、组织名称等,随便填就行。
改完以后不要忘了重新加载配置
sudo systemctl reload nginx
如果配置文件中引入了nginx的默认配置,一定要注释掉,不然就会因为有2个80端口的server块而报错。
# 禁用默认配置
#include /etc/nginx/sites-enabled/*;
看看效果 {#%E7%9C%8B%E7%9C%8B%E6%95%88%E6%9E%9C}
通过http://ip访问
通过https://ip访问
写在最后 {#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E}
当用户通过ip地址访问时返回500只是一种方式,还可以返回403或者重定向到域名,等等等等。
方式比较灵活,只要禁止ip直接访问就行了。