第三节:Nginx基本配置使用详解(动态代理、动静分离、防盗链、多域名站点、下载限速等等)


一. 配置说明1

以Win下nginx 1.19.6 为例,默认的配置文件如下(删除注释后)

下面配置中的events、http、server、location、upstream等属于配置项块。而worker_processes 、worker_connections、include、listen 属于配置项块中的属性。 /50x.html 属于配置块的特定参数参数。其中server块嵌套于http块,其可以直接继承访问Http块当中的参数。

注:如果配置项值中包括语法符号,比如空格符,那么需要使用单引号或双引号括住配置项值,否则Nginx会报语法错误。

例如:log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

http模块下Server下的含义:

A. listen:表示当前的代理服务器监听的端口,默认的是监听80端口。

B. server_name:表示主机名称,后面可以跟多个主机名称,比如:server_name www.testweb.com、download.testweb.com;支持通配符与正则

C. location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

  A. root:里面配置了root时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,主要用于静态文件。

  B. index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

  C. proxy_pass:代理地址

注意:可以配置多个server,同时监听多个端口的。

1. 基本配置

(1). location详解

语法:location[=|~|~*|^~|@]/uri/{……} 配置块:server

  1. =表示把URI作为字符串,以便与参数中的uri做完全匹配。

  2. / 基于uri目录匹配

  3. ~表示正则匹配URI时是字母大小写敏感的。

  4. ~*表示正则匹配URI时忽略字母大小写问题。

  5. ^~表示正则匹配URI时只需要其前半部分与uri参数匹配即可。

匹配优先规则:

  1. 精确匹配优先 =

  2. 正则匹配优先 ^~

  3. 前缀最大匹配优先。

  4. 配置靠前优化

(2). root 和alias区别

A. root

 可配置在 server与location中,基于ROOT路径+URL中路径去寻找指定文件。

B. alias

  只能配置location 中。基于alias 路径+ URL移除location 前缀后的路径来寻找文件。

location /V1 {
      alias  /www/old_site;
      index  index.html index.htm;
}
#防问规则如下
URL:http://xxx:xx/V1/a.html
最终寻址:/www/old_site/a.thml

2. 动态代理

(1). 正向代理

 是指客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 。这个过程当中客户端需要知道代理服务器地址,并配置连接。 比如FQ,我们不能直接访问外国的某些网站,需要中间找个代理。

(2). 反向代理

 是指户端访问目标服务器,在目标服务内部有一个统一接入网关,用来将请求转发至后端真正处理的服务器并返回结果。这个过程当中客户端不需要知道代理服务器地址,代理对客户端而言是透明的。

(3). 二者区别

(4). 代理相关参数

A. 参数如下:

proxy_pass           # 代理服务
proxy_redirect off;   # 是否允许重定向
proxy_set_header Host $host; # 传 header 参数至后端服务
proxy_set_header X-Forwarded-For $remote_addr; # 设置request header 即客户端IP 地址
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求发送最大时间
proxy_read_timeout 90;  # 读取最大时间
proxy_buffer_size 4k; 
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k; 

B. 基本配置 

 使用 proxy_pass属性进行代理,如下配置, 访问 http://localhost:8080/  将会被代理到 http://localhost:9001/ 上;访问 http://localhost:8090/  将会被代理到 http://localhost:9002/ 

代码如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8080;
        server_name   localhost;    
        location / {
            proxy_pass http://localhost:9001;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       8090;
        server_name   localhost;    
        location / {
            proxy_pass http://localhost:9002;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3. 动静分离

(1). 基于目录

server {
        listen 80;
        server_name *.ypf.com;
        root /usr/www/ypf;
        location / {
                index ypf.html;
        }
        location /static {
         alias /usr/www/static;
        }
 }

(2). 基于正则

location ~* \.(gif|jpg|png|css|js)$ {
      root /usr/www/static;
}

二. 配置说明2

1. 防盗链

 直接输入地址,没有referer字段,所以匹配了后面的none或blocked,不跳转。通过搜索引擎打开的含有referer字段,走后面的匹配规则。  

 none 代表没有referer

 blocked 代表有referer,但是被防火墙或代理给去除了。

配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  test2.cneasy.cn;
        location /{
            valid_referers none blocked *.cneasy.cn;
            if ($invalid_referer) {
                return 403;
            }
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

2. 下载限速

配置如下:

location / {
    limit_rate 1m; //限制每秒下载速度
    limit_rate_after 30m; // 超过30秒之后再下载
}

3. IP黑名单

(1). 基本语法

# 屏蔽单个ip访问
deny 192.168.0.1;
# 允许单个ip访问
allow 192.168.0.1;
# 屏蔽所有ip访问
deny all;
# 允许所有ip访问
allow all;
#屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令
deny 123.0.0.0/8
#屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
deny 124.45.0.0/16
#屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令
deny 123.45.6.0/24

(2). 作用范围问题

 A. http{}语句块,所有网站

 B. server{}语句块,单个网站

 C. server下location语句块,单个网站下的某个映射规则

配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;    
    #1. 作用于所有网站
    deny 192.168.3.9;
    server {
        listen       8080;
        server_name   localhost;
        #2.作用于单个网站
        #deny 192.168.3.9;
        location / {
            #3. 作用于单个网站下的某个规则
            #deny 192.168.3.9;
            proxy_pass http://localhost:9001;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

效果如下:

(3). 可以配置成文件,通过include引入。 

 在nginx.conf所在的目录下新建denyIp.conf,在里面编写禁止IP的代码。

denyIp.conf配置

deny 192.168.3.9;
deny 192.168.137.1;

nginx.conf配置

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;    
    #1. 作用于所有网站
    include denyIp.conf;
    server {
        listen       8080;
        server_name   localhost;
        #2.作用于单个网站
        #include denyIp.conf;
        location / {
            #3. 作用于单个网站下的某个规则
            #include denyIp.conf;
            proxy_pass http://localhost:9001;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

相关