使用nginx配置域名及禁止直接通过IP访问网站

createh51周前 (06-08)技术教程10

前段时间刚搭建好这个网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻。

1. nginx配置域名及禁止直接通过IP访问

先来看nginx的默认配置,ubuntu默认位置 /etc/nginx/sites-enabled 。

(注意:sites-enabled里的配置其实是软链接,链接到sites-available下的真实配置,这是nginx的一种最佳实践,希望我们在sites-available下修改配置,等修改好以后在链接到sites-enabled下,不过我这里没采纳这种最佳实践,直接在sites-enabled目录下增加配置,哈哈。)

# default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

}

最简单的配置nginx的方式就是直接改这个default文件,加上自己的网站配置:

# default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name www.domain.com;

    root /path/to/www.domain.com;

    index index.html index.htm;

}

不过,不推荐这种方式。如果这样配置,恶意用户可以用自己的域名指向我们的IP,蹭我们的流量,来养他的域名,非常讨厌。

我更推荐把这个配置复制一份,在复制的配置里修改网站信息。

cp default domain-website

然后修改信息:

# domain-website
server {
    listen 80;   #去掉default_server
    listen [::]:80;   #去掉default_server

    server_name www.domain.com;  #修改域名

    root /path/to/www.domain.com;  #指向网站文件根目录

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

}

这样配置就很灵活了,方便我们禁止IP访问和别人把域名恶意指向我们的IP。

想要禁止IP访问的话,就修改default配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    return 500; # 添加这句,当用IP访问时,返回500错误码

}

这也同样可以阻止别人恶意把域名指向我们的服务器IP,蹭我们的流量。

2. 配置https

如果是配置了https,我们就增加一个default-ssl配置文件:

# default-ssl
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    #ssl on;
    ssl_certificate cert/www.domain.com.pem;   # SSL证书和密钥
    ssl_certificate_key cert/www.domain.com.key;

    server_name _;

    return 500;

}

注意:一定要加上自己的SSL证书和密钥,不然会导致域名的https无法访问。

正常网站https配置:

# domain-website-ssl
server {
    listen 443;
    listen [::]:443;

    ssl on;
    ssl_certificate cert/www.domain.com.pem;   # SSL证书和密钥
    ssl_certificate_key cert/www.domain.com.key;
    ssl_session_timeout 30m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    server_name www.domain.com;  # 域名

    root /path/to/www.domain.com;  # 网站文件根目录

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

}

3. 如何解决别人域名恶意指向自己服务器IP的问题以及搜集流量

如果按照我上面的配置方法,那么就不怕别人把域名指向我们的IP了。要是在应用上述配置之前就已经有恶意域名指向我们IP了,怎么办呢,没问题,我们可以把这些域名重定向到我们自己的域名,相当于把这些流量都搜集起来,导入到自己的域名。

对default和default_ssl做如下修改:

# default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    #return 500; # 添加这句,当用IP访问时,返回500错误码
    return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名

}
# default_ssl
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    #ssl on;
    ssl_certificate cert/www.domain.com.pem;   # SSL证书和密钥
    ssl_certificate_key cert/www.domain.com.key;

    server_name _;

    return 500;
    return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名

}

还可以把自己域名http重定向到https:

server {
    listen 80;
    listen [::]:80;

    server_name www.domain.com;

    return 301 https://$server_name$request_uri;

}

至此,就解决了被别人用域名恶意蹭流量的问题。

--End--

相关文章

部署Nginx-一个ip,多个域名,部署多个项目

一、背景无论是在centos、ubuntu、iis等云服务器,还是在个人的电脑上,当部署Nginx时,基本上都会遇到想用一台服务器(只有一个IP)映射到多个域名上,以供访问多个不同的前端项目的情况(这...

在 Nginx 中防止 SSL 证书被其他域名“窜用”

在 Nginx 中防止 SSL 证书被其他域名“窜用”(即防止未经授权的域名使用你的 SSL 证书),需要确保你的服务器配置只允许合法域名访问,并通过适当的配置阻止非法域名的 HTTPS 请求。一般情...

搭建nginx反向代理用作内网域名转发

情景由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端...

要将端口5002和5003通过Nginx代理到一个域名上的操作笔记

要将端口5002和5003通过Nginx代理到域名www.4rvi.cn的不同路径下,请按照以下步骤配置Nginx:步骤说明创建或编辑Nginx配置文件通常配置文件位于/etc/nginx/sites...

Nginx域名配置

对于想搭建自己博客或者其他个人网站的小伙伴,可能会需要配置域名。在我们购买完服务器,代码敲完,项目搞定,怎么使用域名访问呢?首先购买域名(要有DNS解析)-> 然后域名备案与审核 -> 最...

使用nginx配置动态域名解析

使用nginx配置来达到动态域名解析,resolver指令设置解析器的地址using-nginx-map-directive-to-dynamically-set-proxy-upstream要使用...