1、配置文件目录 Nginx 配置文件位置:
源码安装:/usr/local/nginx/
YUM 安装:/etc/nginx/
下面为 源码安装的配置文件列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ├── conf # 这是Nginx所有的配置文件目录 │ ├── fastcgi.conf # fastcgi相关参数的配置文件 │ ├── fastcgi.conf.default # fastcgi默认的配置文件 │ ├── fastcgi_params # fastcgi的参数文件 │ ├── fastcgi_params.default # fastcgi的默认参数文件 │ ├── koi-utf # 很少用到 │ ├── koi-win │ ├── mime.types # 媒体类型配置文件 │ ├── mime.types.default # 默认媒体类型配置文件 │ ├── nginx.conf # 主配置文件 │ ├── nginx.conf.default # 默认的nginx的主配置文件 │ ├── scgi_params # scgi相关参数文件 │ ├── scgi_params.default # scgi默认相关参数文件 │ ├── uwsgi_params # uwsgi相关参数文件 │ ├── uwsgi_params.default # uwsgi默认相关参数文件 │ ├── win-utf │ └── conf.d # 配置文件 包含的目录
2、默认配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 [root@service conf]# cat nginx.conf 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; } } }
3、配置文件 nginx.conf
由多个块组成,最外面的块是 main,main 包含 Events 和 HTTP,HTTP 包含多个 upstream 和多个 Server,Server 又包含多个 location:
main(全局):配置影响 Nginx 全局的指令。一般有运行 Nginx 服务器的用户组,Nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。
events(事件):配置影响 Nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http:可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。
upstream(负载均衡):指令主要用于负载均衡,设置一系列的后端服务器。
server(主机):配置虚拟主机的相关参数,一个 http 中可以有多个 server。
location(URL匹配特定位置):配置请求的路由,以及各种页面的处理情况。
这几者之间的关系式:server 继承 main,location 继承 server,upstream 既不会继承其他设置也不会被继承。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 .. . # 全局块 events { # events块 .. . } http # http块 { .. . # http全局块 server # server块 { .. . # server全局块 location [PATTERN] # location块 { .. . } location [PATTERN] { .. . } } server { .. . } .. . # http全局块 }
配置文件详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 user www www; worker_processes 8; error_log logs/error.log info; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 65535; events{ use epoll; worker_connections 65535; keepalive_timeout 60; client_header_buffer_size 4k; open_file_cache max=65535 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1; open_file_cache_errors on; } http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 128k; client_max_body_size 8m; sendfile on; autoindex on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; # 开启gzip压缩输出 gzip_min_length 1k; # 最小压缩文件大小,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大; gzip_buffers 4 16k; # 压缩缓冲区 gzip_http_version 1.0; # 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)目前大部分浏览器已经支持GZIP解压,使用默认即可; gzip_comp_level 2; # 压缩等级。1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源; gzip_types text/plain application/x-javascript text/css application/xml; # 压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on; # 让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。 server { listen 80; server_name www.jd.com jd.com; index index.html index.htm index.php; root /data/www/lp; log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /usr/local/nginx/logs/host.access.log main; access_log /usr/local/nginx/logs/host.access.404.log log404; location ~ .*.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; # expires用来指定静态文件的过期时间 } location ~ .*.(js|css)?$ { expires 1h; # expires用来指定静态文件的过期时间 } location / { proxy_pass http://127.0.0.1:88; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; client_max_body_size 10m; client_body_buffer_size 128k; proxy_intercept_errors on; 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; } location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file confpasswd; } location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt| pdf|xls|mp3|wma)$ { expires 15d; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
upstream模块 1 2 3 4 5 6 7 8 9 10 11 12 http # http块 { ... # http全局块 upstream { .... # upstream块 } server # server块 { ... # server全局块 } }
注意: upstream要在调用的server块之前定义 nginx负载均衡支持http和https协议,只需要修改 proxy_pass
后面的协议即可; nginx支持FastCGI, uwsgi, SCGI, memcached的负载均衡,只需将 proxy_pass
改为 uwsgi_pass
, fastcgi_pass
, scgi_pass
, memcached_pass
即可。
Nginx 的 upstream 目前支持 4 种方式的分配:
轮询:将请求依次轮询发给每个服务器,如果后端服务器down掉,能自动剔除。
最少链接:将请求发送给持有最少活动链接的服务器。
ip哈希:通过ip的哈希函数结果决定请求发送给哪个服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。
权重:服务器的权重越高,处理请求的概率越大。用于后端服务器性能不均的情况。
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
缺省配置就是轮询策略;
此策略适合服务器配置相当,无状态且短平快的服务使用
1 2 3 4 upstream bakend { server 192.168.0.14; server 192.168.0.15; }
权重(weight)
权重负载均衡需要使用weight指令定义;
weight和访问比率成正比,权重越高分配到需要处理的请求越多,用于后端服务器性能不均的情况。
此策略可以与最少链接负载和ip哈希策略结合使用;
1 2 3 4 upstream bakend { server 192.168.0.14 weight =10; server 192.168.0.15 weight =5; }
IP哈希(ip_hash)
ip哈希负载均衡使用 ip_hash
指令定义;
nginx使用请求客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求;这样每个访客固定访问一个后端服务器
此策略适合有状态服务,比如session;
1 2 3 4 5 upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
响应时间(fair)(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1 2 3 4 5 upstream backend { server server1; server server2; fair; }
url哈希(url_hash)(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
1 2 3 4 5 6 upstream backend { server squid1:3128; server squid2:3128; hash $request_uri ; hash_method crc32; }
最少链接负载均衡
最少链接负载均衡通过 least_conn
指令定义;
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 http { upstream CashServers { least_conn; server CashServers1.com; server CashServers2.com; server CashServers3.com; } server { listen 80; location / { proxy_pass http://CashServers; } } }
tips 1 2 3 4 5 6 7 upstream bakend{#定义负载均衡设备的Ip及设备状态}{ ip_hash; server 127.0.0.1:9090 down; server 127.0.0.1:8080 weight =2; server 127.0.0.1:6060; server 127.0.0.1:7070 backup; }
调用方式:在需要使用负载均衡的server中增加 proxy_pass http://bakend/ ;
每个设备的状态设置为:
down表示单前的server暂时不参与负载
weight为weight越大,负载的权重就越大。
max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。 client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug client_body_temp_path设置记录文件的目录 可以设置最多3层目录
Incloud指令 当存在多个域名时,如果所有配置都写在 nginx.conf 主配置文件中,难免会显得杂乱与臃肿。为了方便配置文件的维护,所以需要进行拆分配置。
我们可以在nginx的conf目录下创建vhost文件夹
1 [root@service conf]# mkdir vhost
在vhost文件夹中创建配置文件,如:
1 2 3 4 5 6 7 8 9 10 11 server { listen 8000 ; server_name test1.com; location / { proxy_set_header Host $host :$server_port ; proxy_set_header X-Real-Ip $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; echo "test1.com" ; } }
在主配置文件中http{…}段中加入配置内容