nginx之:基本配置

1.nginx经常使用功能

1)反向代理

首先咱们先了解一下什么是正向代理,以下图所示正向代理,代理的是客户端的对服务器方发起的访问,能够起到隐藏客户端IP等信息的做用。javascript

反向代理则表示代理的是服务器端内容,web服务器并无直接暴露到公网上而是经过代理服务才能访问到真正的web服务器。php

2)负载均衡

nginx的负载均衡策略有两种,一种是内置策略,还有一种是扩展策略。其中内置策略分为轮询、加权轮询、IP hash。css

内置策略:html

轮询:是指在因此提供服务的服务器作轮询提供服务。java

加权轮询:根据全部提供服务的服务器权重进行轮询。nginx

ip hash:对客户端请求ip进行hash操做, 而后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,能够解决session不共享的问题。 web

3)web缓存

Nginx能够对不一样的文件作不一样的缓存处理,配置灵活,而且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容能够的进行增删管理 。后端

2.nginx文件结构

conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。浏览器

#user  nobody;   配置用户或用户组,一般为启动nginx的用户组
worker_processes  1; #容许生成的线程数量,一般配置成与cpu数量相同

#error_log  logs/error.log  info; 指定错误日志路径和级别,debug|info|notice|warn|error|crit|alert|emerg

#pid        logs/nginx.pid;  #指定nginx进程运行pid


events {
    accept_mutex on;   #设置网路链接序列化,防止惊群现象发生,默认为on;惊群现象:一个网路链接到来,多个睡眠的进程被同事叫醒,但只有一个进程能得到连接,这样会影响系统性能。
	
    multi_accept on;  #设置一个进程是否同时接受多个网络链接,默认为off
    use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024; #单个worker_processes进程的最大链接数,默认为512
    #最大链接数为worker_processes与worker_connections乘积,在设置了反向代理的状况下最大链接数为前面乘积以后除以4(经验值)。
    #设置最大连接数时不该大于系统内打开的最大文件数,系统能打开的最大文件数和系统内存成正比,通常状况下1G内存大约能够打开的文件数为10万左右。
	
}

http {
    include       mime.types;    #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain

	#自定义日志格式
     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; #用户请求记录日志文件,日志格式
    
     #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
     #对于普通应用,必须设为 on,
     #若是用来进行下载等应用磁盘IO重负载应用,可设置为 off
     sendfile   on;
     sendfile_max_chunk 100k;  #每一个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
	
     #tcp_nopush     on;

     keepalive_timeout  65;   #链接超时时间,默认为75s

     #gzip  on;  #开启gzip压缩
    
     #负载均衡配置示例默认是以轮询
     upstream backend {    
	 #ip_hash; 
         server 192.168.1.101:8090;
         server 192.168.1.101:8080;
     }
     #虚拟主机配置
     server {
        listen       80; #监听80端口
        server_name  www.nginx.cn;

        #charset koi8-r;
		
        #access_log  logs/host.access.log  main;#该虚拟机下请求日志

	#监听根路劲
        location / {
	    proxy_pass http://backend;
        }

        error_page   500 502 503 504  /50x.html; #错误页面
		
        location = /50x.html {
            root   html;
        }
        
	#静态文件,nginx本身处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ { 
            #过时30天,静态文件不怎么更新,过时能够设大一点,
            #若是频繁更新,则能够设置得小一点。
            expires 30d;
        }
		
	#禁止访问 .htxxx 文件
        location ~ /.ht {    #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
            deny all;
        }
    }
}

1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;缓存

2.$remote_user :用来记录客户端用户名称;

3.$time_local : 用来记录访问时间与时区;

4.$request : 用来记录请求的url与http协议;

5.$status : 用来记录请求状态,成功是200;    

6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;

7.$http_referer :用来记录从那个页面连接访问过来的;

8.$http_user_agent :记录客户端浏览器的相关信息;

3.Location基础配置

1)语法规则

location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}

通用匹配:“/”

精确匹配:“=”

字符串匹配:字符串匹配开头“ ^~ ”

正则匹配:区分大小写匹配“~”;不区分大小写匹配“~*”;区分大小写不匹配“!~”;不区分大小写不匹配“!~*”。

2)匹配优先级

精确匹配 > 字符串匹配( 长 > 短 [ 注: ^~ 匹配则中止匹配 ]) > 正则匹配( 上 > 下 )

精确匹配只能命中1个

字符串匹配使用匹配最长的匹配结果

正则匹配按照location定义的顺序进行匹配,先定义具备高优先级

3)实际应用中经常使用的几个规则

#直接匹配网站根,经过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也能够是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
 
# 第二个必选规则是处理静态文件请求,这是nginx做为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
# 请求/static/a.txt 将被映射到实际目录文件: /webroot/res/static/a.txt
root /webroot/res/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
 
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,本身根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的状况不多了
location / {
proxy_pass http://tomcat:8080/
}
相关文章
相关标签/搜索