Tch
Tch
Published on 2024-11-01 / 41 Visits
0
0

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

为什么要禁止通过ip访问

以下是来自通义千问的回答

通过禁止直接通过IP地址访问,可以防止未授权用户访问网站。这可以减少潜在的安全风险,减少暴露服务器信息的风险,从而降低被攻击的可能性。用户通过域名访问,而不是IP地址,可以增强品牌的识别度,可以提供一致的品牌形象。禁止直接通过IP地址访问可以简化Nginx的配置,减少不必要的复杂性。如果网站可以通过IP地址和域名同时访问,搜索引擎可能会认为这是重复内容,影响SEO排名。通过域名访问可以集中网站的权重,提高搜索引擎排名。

给用户只提供域名这一个打开网站的入口,虽然有了域名再获取服务器ip地址不是什么难事,但也是有门槛的。

当然这么做最重要的是为了安全、安全、还是TMD安全

配置允许通过域名访问

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地址直接访问

这两个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/*;

看看效果

通过http://ip访问

通过https://ip访问

写在最后

当用户通过ip地址访问时返回500只是一种方式,还可以返回403或者重定向到域名,等等等等。

方式比较灵活,只要禁止ip直接访问就行了。


Comment