51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Nginx禁止直接通过ip访问网站

为什么要禁止通过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/是生成的证书和密钥的路径,可根据实际情况。

在生成证书时,需要填写一些信息,例如国家、省份、城市、组织名称等,随便填就行。

1687A7A8-F28D-43EB-8F1A-F6F86F733B81.png

改完以后不要忘了重新加载配置

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直接访问就行了。


赞(0)
未经允许不得转载:工具盒子 » Nginx禁止直接通过ip访问网站