Nginx配置文件详解

原文链接:https://my.oschina.net/jiaoy/blog/738282

Nginx安装成以后,所有的功能实现都要在配置文件中完成,下面详细介绍一下nginx的配置文件

Nginx配置文件详细介绍

#指定nginx进行运行的用户和用户组,默认为nobody,windows下可以不指定
#user  nobody;
#第一个nginx代表能使用nginx的用户,第二个nginx代表能使用nginx的用户组
#user nginx nginx;

#指定nginx可以开启的进程数,默认一个,一般测试的话,也就一个就行了,
#如果是多核CPU,建议设置为等于CPU总核心数。
worker_processes  1;

#error_log主要用于指定错误日志的存放位置和错误日志的记录级别,从低到高
#一共6个级别,分别为:debug、info、notice、warn、error、crit,输出的日
#志内容依次减少,在这个位置指定错误日志,是全局错误日志,如果下面没有
#指定的情况下,所有的日志信息都会存到这个文件中
#error_log  logs/error.log;
#error_log  logs/error.log  notice(输出日志级别);
#error_log  logs/error.log  info;

#nginx.pid 用于记录nginx的进程号,而该指令的作用就是指定这个文件的存放
#位置,通过这个文件,我们知道有哪几个进程是nginx的进程
#pid        logs/nginx.pid;

#worker_rlimit_nofile指令用于指定进程可以打开的最大文件描述符的数目,这
#个值理论上应该是能打开的最大数目除以进程数目的,但是我们不能保证nginx
#分配请求的时候是均匀分布的,所有我们一般在Linux下通过命令:ulimit -n
#查询出最大值,然后设置成该值,默认值1024
worker_rlimit_nofile 10240; 

#events模块用于设置指定nginx的工作模式和每个工作进程连接数上限
events {
	#指定nginx的工作模式,nginx工作模式分为标准事件模式:select,poll,当
	#当前系统没有更有效的工作模式的时候,nginx会采用这个模式;高效事件
	#模式:epoll-Linux下的高效事件模式,适用于Linux2.6+的系统;
	#kqueue-FreeBSD使用的高效模式,默认一般都是epoll
	use epoll;
	#每个进程的最大连接数,nginx最大连接数=worker连接数*worker进程数,
	#建议大于9000,默认1024 
    worker_connections  10240;
}


http {
	#mime.types文件里面包含了文件扩展名和文件类型的映射
	#include是指定mime.types这个文件的位置,可以是绝对路径,也可以是相
	#对路径
    include       mime.types;
	#默认的文件类型
    default_type  application/octet-stream;

	#全局设置默认编码格式,也可以在server中进行设置
	#charset utf-8
	
	#log_format指定日志格式,main为该格式的名称,在需要用该格式的地
	#方直接用名称就可以代替格式
	#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
	#$remote_user:用来记录客户端用户名称;
	#$time_local: 用来记录访问时间与时区;
	#$request: 用来记录请求的url与http协议;
	#$status: 用来记录请求状态;成功是200,
	#$body_bytes_sent :记录发送给客户端文件主体内容大小;
	#$http_referer:用来记录从那个页面链接访问过来的;
	#$http_user_agent:记录客户浏览器的相关信息;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
	#				   '$status $body_bytes_sent "$http_referer" ' 
	#				   '"$http_user_agent" "$http_x_forwarded_for"';

	#主机访问日志
    #access_log  logs/access.log  main;

	#开启高效文件传输模式,普通web应用可以设置为on,如果是下载为主等对磁盘
	#I/O负载较重的应用,建议设置为off,如果图片加载不正常,建议设置为off。
	#sendfile命令是用来指定nginx是否调用sendfile函数(zero copy 方式)来输
	#出文件
    sendfile        on;
	#下面两个指令只有在sendfile只能为on的时候有用,用于防止高效文件传输模
	#式下的网络阻塞
	#开启该指令,会把响应头信息和文件的开始放在一个文件里发布,减少报文数量
    #tcp_nopush     on;
	#开启该指令,内核会等待将更多的字节组成一个数据包,从而太高I/O性能
	#tcp_nodelay    on;

	#客户端和nginx连接保持活动的超时时间,时间超过以后,nginx会关闭这个连接
    #keepalive_timeout  0;
    keepalive_timeout  65;

	#httpgzip压缩模块部分,实现在线实时压缩输出数据流(这一块儿对网站优化十
	#分重要)
    #开启gzip压缩模块,实时压缩输出数据流
	#gzip  on;
	#允许压缩页面最小字节数,默认值为0,即所有都压缩,建议设成1k,因为小于
	#1k的进行压缩可能会越压越大
	#gzip_min_length 1k;
	#申请4个16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相等的
	#内存空间来存储压缩结果
	#gzip_buffers 4 16k;
	#压缩版本,用户识别http协议版本,默认就是1.1
	#gzip_http_version 1.1
	#指定压缩比率,用来指定gzip压缩比,1最低,9最高,越高传输速率越快,但
	#是压缩速率越慢,越耗CPU
	#gzip_comp_level 2
	#用来指定压缩类型,text/html不用指定,默认都会进行压缩
	#gzip_types text/plain application/x-javascript text/css application/xml;
	#on表示可以让前端的缓存服务器缓存经过gzip压缩的页面
	#gzip_vary on;
	
	
	#负载均衡设置模块,该模块通过一个简单的调度算法实现客户端ip到服务
	#器端的负载均衡
	#test.com是指需要实现负载均衡的域名
	upstream test.com{
		#nginx支持的负载均衡调度算法:1、默认轮询,2、权值轮询,
		#3、ip_hash,4、fair,5、url_hash
		#㈠默认轮询:请求按照时间顺序逐一分配到不同的后台服务器,如果某
		#台服务
		#器宕机,nginx会自动提出该服务器,是请求访问不会收到影响
		#㈡权值轮询:服务器的权值越大,被轮询的几率越大,这种
		#情况主要用户服务器性能不均的时候
		#㈢ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访
		#客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
		#㈣fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页
		#面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响
		#应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,
		#如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
		#㈤url_hash。此方法按访问url的hash结果来分配请求,使每个url定向
		#到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本
		#身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 
		#的hash软件包。
		#注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状
		#态不能是weight和backup。
		ip_hash;
		server 192.168.10.13:80;
		#参数down表示当前ip不参与负载均衡,如果参数是backup,则表示该ip所
		#在服务器是备份机,平时不会参与到负载均衡当中,只有当其他的服务器
		#出现故障或者服务器忙的时候,才会参与到负载均衡,因此这台服务器压
		#力最小
		server 192.168.10.14:80  down;
		#max_fails是允许请求失败的次数,当超过该次数,则返回
		#proxy_next_upstream 模块定义的错误。
		#fail_timeout参数是由于max_fails失败后,暂停服务的时间
		server 192.168.10.15:8009  max_fails=3  fail_timeout=20s;
		server 192.168.10.16:8080;
	}

	#虚拟主机配置
    server {
		#监听的端口
        listen       80;
		#监听的IP地址或者域名,多个IP地址或者域名用空格隔开
        server_name  localhost;
		
		#设置默认的访问首页
		#index index.html index.htm index.jsp

		#设置虚拟主机网站根目录
		#root /usr/tomcat7.0/webapps/test
		
		#设置网页的默认编码格式
        #charset koi8-r;

		#用来指定该虚拟主机的访问日志,main是上面定义的日志格式
        #access_log  logs/host.access.log  main;

		#location用于配置URL,location支持正则表达式匹配,也支持条件判断
		#匹配,用户可以通过location指令实现Nginx对动、静态网页的过滤处理。
		#格式:location [ = | ~ | ~* | ^~ ] uri { ... }
		#location URI {}:对当前路径及子路径下的所有对象都生效;
		#location = URI {}:精确匹配指定的路径,不包括子路径,因此,只对
		#当前资源生效
		#location ~ URI {},location ~* URI {}:模式匹配URI,此处的URI可
		#使用正则表达式,~区分字符大小写,~*不区分字符大小写;
		#location ^~ URI {}:不使用正则表达式
        location / {
            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;
        }

        # 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;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

注意:配置文件中的负载均衡模块upstream这一块在默认配置文件中是没有的,如果有需要再加

配置文件location模块详解

location模块是nginx配置文件中最灵活的部分,动态代理以及动静分离都是在这一块儿做的配置,下面详细举例:

1、location定义的几种格式:

        location URI {}:该格式表示该配置对该URI下的所有路径及子路径都生效;

        location = URI {}:该格式是精确匹配,只对该URI有效,子路径无效;

        location ~ URI {},location ~* URI {}:模式匹配,该格式可以使用正则表达式,~表示要区分字符大小写,~*表示不区分字符大小写,该格式还有两种特殊形式:location !~ URI {},locatio !~* URI {},表示区分字符大小写不匹配,区分不字符大小写不匹配,即满足这些规则的URI不匹配到这些路径下;

        location ^~ URI {}:也是模式匹配,但是不能使用正则表达式;

        location / {}:通用匹配,任何请求都可以匹配到。

2、多location匹配规则(参考资料得来,未经验证,谨慎使用 !^-^):

        多规则匹配是根据精确度来匹配的,精确度越高越先匹配到,同级匹配也遵循该原则。

        优先级一次递减 =URI —— ^~URI —— ~URI —— ~*URI —— URI —— /

        其实 / 也是URI,只是更加通用

        规则举例:

 location = / {  
   #规则1  
}  
location = /login {  
   #规则2  
}  
location ^~ /static/ {  
   #规则3  
}  
location ~ \.(gif|jpg|png|js|css|php)$ {  
   #规则4  
}  
location ~* \.png$ {  
   #规则5  
}    
location / {  
   #规则6 
}  

 

   效果展示:

        1、当我们访问网站根目录的时候,或者通过域名访问网站根目录的时候,例如:http://localhost/,都会匹配规则1

        2、当我们访问链接:http://localhost/login的时候,就会匹配规则2,但是加入我们访问http://localhost/login/test,则不会匹配规则2,因为这个要求精确匹配,即所有URI都要能对应上

        3、当我们访问链接http://localhost/static或者http://localhost/static/test等,都会匹配规则3,但是http://localhost/test/static/就不会匹配规则3

        4、当我们访问链接http://localhost/test.php会匹配规则4而不是规则5,因为规则4区分大小写,比规则5要求的精确度更高,所以会匹配规则4

        5、当我们访问链接http://localhost/test.PHP的时候,则不会匹配规则4,而会去匹配规则5,因为规则4要求区分大小写,该链接不满足规则。

        6、当访问链接http://localhost/test/test01的时候则会匹配规则6

3、常用实例举例:

#1、项目首页
location =/ {
	#动态首页
	proxy_pass http://localhost:8080;
	#静态首页
	#root /usr/tomcat7.0/webapps/test;
	#index index.html index.htm index.jsp
}
#2、处理静态文件请求(和3结合一块儿也就是所谓的动静分离)
#方法一:
location ~* /.(gif|jpg|jpeg|png|bpm|css|js|html) {
	#static目录为静态文件目录
	root /usr/tomcat7.0/webapps/test/static;
}
#方法二:
location ^~ /static/ {
	root /usr/tomcat7.0/webapps/test/static;
}

#3、动态代理
location / {
	proxy_pass http://localhost:8080/test;
}

Nginx的StubStatus模块配置(附加功能,未经验证)

StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用。以下指令指定启用获取Nginx工作状态的功能。

location /NginxStatus {
	#该指令表示开启StubStatus工作状态统计功能
    stub_status     on;
	#指定stubstatus模块的访问日志
    access_log             logs/NginxStatus.log;
	#nginx的一种认证机制
    auth_basic             "NginxStatus";
	#用来指定认证的密码文件
    auth_basic_user_file    ../htpasswd;
}

Nginx允许访问、拒绝访问

location / {
	proxy_pass http://localhost:8080/test;
	#下面四个规则,同时只能出现一个,多个ip可以用空格隔开
	#允许访问规则
	allow 192.168.1.10;
	#拒绝访问规则
	#deny 192.168.1.2;
	#允许所有
	#allow all;
	#拒绝所有
	#deny all;
}

Nginx打开目录浏览功能

Nginx默认是不允许列出整个目录的,如果需要该功能需要在配置文件中做配置,该功能可以针对整个网站,网站的一部做,分别在http,server或者location中配置就行

location / { 
	#开启目录浏览功能
    autoindex on; 
	#显示文件大小,on显示的是bytes,off显示的是kb、mb或者gb
    autoindex_exact_size on; 
	#目录时间显示,on显示GTM时间,off显示文件服务器时间
    autoindex_localtime on; 
    root   /data/www; 
    index  123.html; 
} 

 

转载于:https://my.oschina.net/jiaoy/blog/738282

展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页