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


    前段时间刚搭建好个人网站,一直没有关注一个问题,那就是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;
    
    }
    

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

    nginxhero.jpg

    --End--

    (本文同时发表在我的个人网站: https://www.guozhenyi.com/index.php/archives/25/

  • 相关阅读:
    ARM(ARM处理器)
    Android系统
    2014-9-17二班----11 web project
    2014-9-17二班----10 web project
    append() 、push() 和pop()的区别
    python hash
    虚拟机卡掉
    虚拟化
    heroinfo_set.all 函数
    encode()和decode()两个函数
  • 原文地址:https://www.cnblogs.com/forheart/p/12945355.html
Copyright © 2020-2023  润新知