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

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

使用nginx配置域名及禁止直接通过IP访问网站的更多相关文章

  1. Nginx配置实例-负载均衡实例:平均访问多台服务器

    场景 Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. Nginx如何设置禁止IP访问网站

    需要禁止IP访问网站.在相关的server中设置相关的限制即可.

  3. 禁止北京地区IP访问站点

    <script type="text/javascript" src="http://counter.sina.com.cn/ip" charset=&q ...

  4. 通过ASP禁止指定IP和只允许指定IP访问网站的代码

    过ASP禁止指定IP和只允许指定IP访问网站的代码,需要的朋友可以参考下. 一.禁止指定IP防问网站,并执行相应操作: 代码如下: <% Dim IP,IPString,VisitIP '设置I ...

  5. vue配置手机通过IP访问,Win10让局域网内其他电脑通过IP访问网站的方法

    vue配置手机通过IP访问config/index.js// Various Dev Server settings host: '0.0.0.0', // can be overwritten by ...

  6. Nginx配置域名转发实例

    域名:cps.45wan.com   所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...

  7. Nginx网站使用CDN之后禁止用户真实IP访问的方法

    做过面向公网WEB的运维人员经常会遇见恶意扫描.拉取.注入等图谋不轨的行为,对于直接对外的WEB服务器,我们可以直接通过 iptables .Nginx 的deny指令或是程序来ban掉这些恶意请求. ...

  8. Linux下Nginx配置阿里云 SSL证书实现HTTPS访问

    这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...

  9. Nginx 指定域名(或子域名)和网站绑定

    问题起因 博主最近在 CentOS 上面部署另外一个网站,但并不想通过端口号来访问,因为端口号对于 SEO 优化不利,且用户访问较繁琐(使用域名不就是为了方便用户访问吗?再引入端口号岂不是和使用域名的 ...

随机推荐

  1. LeetCode 73,为什么第一反应想到的解法很有可能是个坑?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第42篇文章,我们来看看LeetCode第73题矩阵置零,set matrix zeroes. 这题的难度是Mediu ...

  2. 实现一个字符串匹配算法,从字符串 H 中,查找 是否存在字符串 Y ,若是存在返回所在位置的索引,不存在返回 -1(不基于indexOf/includes方法)

    /** 1.循环原始字符串的每一项,让每一项从当前位置向后截取 H.length 个字符, 然后和 Y 进行比较,如果不一样,继续循环:如果一样返回当前索引即可 **/ function myInde ...

  3. Redis高可用-主从,哨兵,集群

    主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...

  4. 使用Python代码制作GIF动态图

    使用Python  PIL.Image 制作GIF图片: import  PIL.Image                      相关模块 img = Image.open(img_name)  ...

  5. Java实现 LeetCode 552 学生出勤记录 II(数学转换?还是动态规划?)

    552. 学生出勤记录 II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的 ...

  6. Java实现 LeetCode 434 字符串中的单词数

    434. 字符串中的单词数 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my nam ...

  7. Java实现 蓝桥杯 猜算式

    猜算式 看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数. 如果没有限定条件,这样的例子很多. 但目前的限定是:这9个方块,表示1~9的9个数字 ...

  8. 总结:Jmeter常用参数化方式

    一.从CSV文件中读取 二.通过函数生成 三.用户自定义变量 四.用户参数 五.使用正则表达式提取 六.从数据库中读取

  9. Redis集群方式

    Redis有三种集群方式:主从复制,哨兵模式和集群. 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用 ...

  10. Python3和Python2中int和long的区别?

    Python3:Python3中int类型的范围是动态长度的,正整数或者负整数,用sys.getsizeof()可以看int占了几位. Python2:Python2中long类型的范围是无限大小.