nginx 配置详情

1、配置文件详解

        配置文件主要有main、events、http、server、location几个部分组成。

1.1、main中配置
# 指定用户
user  nobody;
# 工作进程数(物理CPU内核数或者内核数两倍)
worker_processes  1;
work_rlimit_nofile; # 用于设置最多打开文件数量
# 错误日志第一个参数为日志存放路径,第二个参数指定日志记录等级:debug,info,notice,warn,error,crit
# 等级越低记录日志越详细,默认error(还可以在http,server,location模块中)
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 关闭错误日志 
# error_log /dev/null
#pid        logs/nginx.pid;
1.2、event 配置
events {
# 每个worker进程可以创建多少个连接
    worker_connections  1024;
    #使用epoll模型
    use epoll;
    # 是否允许一个工作进程响应多个请求
    multi_accept on;
}
1.3、http 配置
http {
	# 访问控制配置在http模块中,表示全局生效,server中或者location中也有权限控制,http的会失效
	# a、内层优先级高于外层;b、先出现会覆盖后出现的
	#(这里有歧义:例子:allow 192.168.109.132;deny all。这种情况只允许192.168.109.132访问,其他都被阻止)
	deny/allow all/固定ip
	# include引入子配置文件,mime.types定义文件格式对应渲染方式
    include       mime.types;
    #如果文件类型不包含在mine.types中,使用默认类型(application/octet-stream: 任意的二进制数据)
    default_type  application/octet-stream;
    
    # 日志配置,main表示访问日志格式名称(可以自定义),后面字符串表示访问日志格式样式,log_format只可以出现在http模块中
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    # 定义存储路径和缓存大小,相对于安装路径(/usr/local/nginx),
    #access_log  logs/access.log  main(这个名称和log_format中自定义名称一致) buffer=2k flush=5s;
    # buffer 设置内存缓冲区大小,flush设置内容保存在缓冲区最大时间(多久刷新到磁盘)
    # 关闭日志
    #access_log  off;
    
# 数据零拷贝(如果关闭,会将文件先加载到应用程序内存,然后转发到网络接口,开启就不会加载到内存,直接通过网络接口读取,减少数据拷贝过程)。
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    #隐藏版本号
    server_tokens on;
    #优化服务器域名的散列表大小 
    server_names_hash_bucket_size 64;
    server_names_hash_max_size 2048;
    #开启高效文件传输模式
    sendfile on;
    #减少网络报文段数量
    #tcp_nopush on;
    #提高I/O性能
    tcp_nodelay on;
    #连接超时 时间定义 默认秒 默认65秒
    keepalive_timeout 60;
    #读取客户端请求头数据的超时时间 默认秒 默认60秒
    client_header_timeout 15;    
    #读取客户端请求主体的超时时间 默认秒 默认60秒
    client_body_timeout 15; 
    #响应客户端的超时时间 默认秒 默认60秒
    send_timeout 25;
    #上传文件的大小限制  默认1m
    client_max_body_size 8m;
    
    # 和server同级,可以配置多个ip,通过别名配置负载均衡(默认轮询,weight是权重)
    # down 是指让当前机器不参与负载均衡, backup没有机器可以用,才使用这台机器  
    # max_fails:允许请求失败次数,默认为1;fail_timeout:经历max_fails次失败后,暂停服务的时间。
    # 不常用负载均衡策略:
    # ip_hash(相同的ip指向相同的服务器,适用于无状态请求,站点易变的不适合用)
    # least_conn(最小连接数)
    # url_hash(根据用户访问的url进行定向转发,默认不支持)
    # fair(根据后端服务器响应时间,默认不支持,需要配置脚本才能实现)
    upstream  my_name{
    	server ip:port weight=5 max_fails=1 fail_timeout=2;
    	server ip:port weight=1 backup/down;
    }
    
    ## 配置临时缓存(在http模块中)
    # 临时缓存会先保存在proxy_temp_path路径下,然后保存到proxy_cache_path
    proxy_temp_path /root/nginx/***/**;
    # 自定义临时缓存路径,levels:根据url的hash值,从字符串末尾取,第一层目录字符个数:第二层目录字符个数;keys_zone:指定缓存区名称和大小;inactive:主动清空在指定时间未被访问的缓存。
    proxy_cache_path /***/** levels=1:3 keys_zone=cache_one:50m inactive=1m max_size=500m
    
    # 限制虚拟主机的并发数
    limit_conn_zone $server_name zone=preserver:10m;  # 开辟一个共享空间保存ip,并设置大小
    limit_conn preserver 10; # 限制连接数量(可用于http,server,location)
    
    # 限制响应传输速率(可用于http,server,location,location中的if中)
    limit_rate 100k; # 限制响应传输速率
    limit_rate_after 10m; # 传输指定大小文件后,才进行限速
  
    server{
    	listen 80;
    	server_name localhost;
    	limit_conn preserver 10; # 
    }
	
	
# 一个server代表一个虚拟主机
    server {
		# 监听端口号
        listen       80;
		# 主机名/域名,可以配置多个,可以完整匹配/正则匹配/通配符匹配
        server_name  localhost localhost1;
        # 可以限定访问控制
        deny/allow all/固定ip;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
		# 域名/主机名后面拼接的资源路径
        location / {
        	#1、临时缓存配置
        	proxy_cache cache_one; # 与自定义缓存名称一致
        	proxy_cache_key $host$uri; # 指定缓存key
        	proxy_cache_valid 200 1m;  # 指定200状态码缓存时间1分钟
        	# 2、永久缓存配置
        	root cache; # 永久缓存保存路径,需要手动创建
        	proxy_store on; # 开启永久缓存
        	proxy_store_access user:rw group:rw all:r; # 设置目录用户权限
        	proxy_temp_path cache_tmp; # 设置永久缓存临时文件路径
        	
        	proxy_pass http://www.baidu.com;
        	# 配置完proxy_pass,下面的root和index都不会生效
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # 设置浏览器静态资源缓存过期时间
        location ~ \.(jpg|gif|png) {
            root   html;
            expires 30d;  # 设置浏览器静态资源缓存时间30天
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
2、location配置详解
2.1、location 前缀
=  # 表示精准匹配;
~  # 使用正则表达式匹配,区分大小写;
~* # 使用正则表达式匹配,不区分大小写;
^~ # 不使用正则表达式匹配,以指定模式开头的匹配(遵循最大匹配原则);
@  # 不能被外部客户端访问,只能被nginx内部的配置指令访问。

注意:

a、使用正则匹配,只有前面的正则匹配不成功才匹配后面的正则;
b、普通 location(即不带前缀的)遵循最长匹配原则,和正则一起使用,当正则匹配成功,最长匹配不会生效;
c、location / {} 和 location =/ {}:前者遵循最大匹配,其他都匹配不到默认会走这个 location,后者是精确匹配,只能匹配 / 路径。

2.2、正则匹配优先级

        只要优先的 location 匹配成功,后面的不会再进行匹配。

精确匹配(=)> 不使用正则表达式匹配(^~) > 正则匹配不区分大小写(~*) > 正则匹配(~) > 普通最大前缀匹配
2.3、静态资源路径配置

        静态资源配置使用的 root 和 alias 两种方式配置。

1、root:会拼接locating后面的路径,资源路径后面不加/;
# 例如:如果请求/img/test.png,会将请求映射为:/var/www/image/img/test.png
location /img/{
	root /var/www/image; 
}
2、alias:不会拼接location后面的路径,资源路径后面加/;
# 例如:如果请求/img/test.png,会将请求映射为:/var/www/image/test.png
location /img/{
	alias:/var/www/image/; 
}
2.4、location 的 uri 配置
2.4.1、location 和 proxy_pass 后面加不加 /

1)、proxy_pass 端口后面没有 / ,则会将 location 及其后缀的内容完全拼接到 proxy_pass 所配置的地址后。

2)、proxy_pass 端口后面有 /,则仅会将 location 的后缀拼接到 proxy_pass 所配置的地址后。

示例:请求地址为:http://192.168.1.1:80/test/aa/bb

location 配置的前缀 proxy_pass 配置 拼接后结果 备注
/test/aa proxy_pass 后加 / http://192.168.1.1:81/test/aa//bb 拼接的后缀为:/bb
/test/aa proxy_pass 后不加 / http://192.168.1.1:81/test/aa/bb 拼接的后缀为全部:/test/aa/bb
/test/aa/ proxy_pass 后加 / http://192.168.1.1:81/bb 拼接的后缀为:bb
/test/aa/ proxy_pass 后添不加 / http://192.168.1.1:81/test/aa/bb 拼接的后缀为全部:/test/aa/bb

如果请求地址为:http://192.168.1.123/test/aabb,location 为: /test/aa/,后缀是:bb,proxy_pass 端口后面要加 /。

总结:本文详细介绍了 nginx 详细的配置内容,并且说明了 location  的配置规则,静态资源和代理配置加不加 / 的示例展示,掌握到此,可以基本实现 nginx 的开发使用要求。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:上了年纪的小男孩。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

nginx 配置详情_第1张图片

你可能感兴趣的:(chrome,前端,nginx)