conf:
main { #全局设置
Events{}
HTTP{
server{ #主机设置
location{} #URL匹配特定位置的设置
location{}
……
}
server{
}
……
}
}
main部分设置的指令将影响其他所有的设置;
server部分的指令主要用于指定主机和端口
upstream部分主要用于负载均衡,设置一系列的后端服务器
location部分用于匹配网页位置。
四者关系:
server继承main;location继承server;upstream不会继承其他设置也不会被继承。
一、Nginx全局属性的配置
user nobody nobody; | 指定Nginx Worker进程运行用户以及用户组,默认为nobody |
worker_processes 4; | 主模块指令,指定了Nginx要开启的进程数,每个进程大约消耗10M~12M,建议与CPU核数一致即可; |
error_log logs/error.log notice; | 定义全局错误日志,日志输出级别为debug,info,notice,warn,error,crit可供选择 |
pid logs/nginx.pid | 用来指定进程id的存储文件位置 |
worker_rlimit_nofile 65535; | 用于指定一个nginx进程可以打开的最多文件描述符数目,需要使用命令"ulimit -n 65535"来设置 |
events { | events用来设定Nginx的工作模式及连接上 |
use epoll; | use用来指定nginx工作模式。Nginx支持的工作模式有select,poll,kqueue,epoll,rtsig和/dev/poll。其中select和poll是标准工作模式,kqueue和epoll是高效工作模式,不同的是epoll主要用于Linux系统,而kqueue主要用于BSD系统中。对于Linux系统,epoll是首选。 |
worker_connections 65536; | 用于定义Nginx每个进程的最大连接数,默认是1024. |
} |
因此Nginx的最大客户端连接数 max_client = worker_processes * worker_connections
二、HTTP服务器的配置
include conf/mime.types;
defaul_type application/octet-stream; #default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx不予以解析,用浏览器访问PHP文件时就会出现下载窗口。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
client_max_body_size 200m; #用来设置允许客户端请求的单个文件最大的字节数
client_header_buffer_size 32k; #用来指定来自客户端请求头的headerbuffer大小,对于大多数请求,1KB的缓冲区大小已经足够了,如果自定义了消息头或有更大的cookie也可以增加缓冲区的大小;
large_client_header_buffers 4 32k; #用来指定客户端请求中较大的信息头的缓存的最大数量和大小,4为个数。128为大小,最大缓存为128KB
sendfile on; #参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on,用于防止网络阻塞。
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; #用于设置客户端连接保持活动的超时时间,超过这个时间后服务器
user nobody nobody;
client_header_timeout 10; #用于设置客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误
client_body_timeout 10; #用于设置客户端主体读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误
send_timeout 10; #用于指定客户端的超时时间,这个仅限于两个连接活动之间的时间,如果超过这个时间客户端没有任何活动,Nginx将会关闭连接
}
扩展:想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:
参数 | 说明 | 示例 |
$remote_addr | 客户端地址 | 211.28.65.253 |
$remote_user | 客户端用户名称 | -- |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request | 请求的URI和HTTP协议 | "GET /article-10000.html HTTP/1.1" |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | www.it300.com 192.168.100.100 |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器等信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$request_time | 整个请求的总时间 | 0.205 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
三、HttpGzip模块配置(支持在线实时压缩输出数据流)
gzip on; | #开启gzip压缩,实时压缩输出数据流 |
gzip_min_length 1k; | #用于设置允许压缩的页面最小字节数,页面字节数从header头的Content_Length中获取。默认值为0,不管页面多大都进行压缩,建议设置成大于1k字节数,小于1k可能会越压越大。 |
gzip_buffers 416k; | #表示申请4个单位为16k的内存作为压缩结果流缓存。 |
gzip_http_version 1.1; | #用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。 |
gzip_comp_level 2; | #用来指定压缩比,1压缩比最小但处理速度最快;9压缩比最大,传输速度快,但是处理最慢,耗费CPU资源 |
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; | |
gzip_vary on; | #该选项可以让前端的缓存服务器缓存经过gzip压缩的页面。 |
四、负载均衡配置
Nginx的负载均衡模块中常用的几种调度算法:1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器死机,故障系统将被自动踢除,使用户访问不受限制。
upstream backserver {
server 192.168.1.14;
server 192.168.1.15;
}
2.weight
指定轮询权值,Weight值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况。
upstream backserver {
server 192.168.1.14 weight=1;
server 192.168.1.15 weight=2;
}
3.ip_hash
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享的问题。
upstream backserver {
ip_hash;
server 192.168.0.14;
server 192.168.0.15;
}
4.重试策略
可以为每个 backserver 指定最大的重试次数,和重试时间间隔,所使用的关键字是 max_fails 和 fail_timeout。
upstream backserver {
server 192.168.1.14 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.15 weight=2 max_fails=2 fail_timeout=30s;
}
5.热机策略
当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就会使用由 backup 标注的备机。必须要注意的是,backup 不能和 ip_hash 关键字一起使用。
upstream backserver {
server 192.168.1.14 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.15 weight=2 max_fails=2 fail_timeout=30s;
server 192.168.1.16 backup;
}
扩展:
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态,常用状态有:
down:表示当前的服务器暂时不接受负载均衡backup:预留的备份机器,当其他所有的非backup机器出现故障或忙的时候才会请求backup机器,因此这台服务器压力最轻
max_fails:允许请求失败的次数,默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
fail_timeout:在经历了max_fails次失败后,暂停服务时间。
例如:
upstream ixdba.net {
ip_hash;
server 192.168.12.133:80;
server 192.168.12.134:80 down;
server 192.168.12.135:8009 max_fails=3 fail_timeout=20s;
server 192.168.12.136:8080;
}
其中,ixdba.net为负载均衡器的名称,该名称可以任意指定,在后面需要的地方直接调用。
五、server虚拟主机配置
server {listen 80;
server_name 192.168.12.188 www.ixdba.net;
index index.html index.htm index.jsp;
root /var/www/html/www.ixdba.net;
charset gb2312;
access_log /var/log/nginx/tc/access_tc.log main;
error_log /var/log/nginx/tc/error_tc.log notice;
}
六、URL匹配配置
1.可以通过location指令实现Nginx对动,静态网页的过滤处理。如下设置通过locaiton指令对URL进行分析处理,所有扩展名为.gif、.jpg .jpeg .png .bmp .swf的静态文件都交给nginx来处理,并指定过期时间为30天。location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /var/www/html/www.ixdba.net;
expires 30d;
}
2.将根目录下的upload和html下的所有文件都交给nginx处理
location ~ ^/(upload|html)/ {
root /var/www/html/www.ixdba.net;
expires 30d;
}
3.对此虚拟主机下的动态网页的过滤处理,也就是将所有的以.jsp为后缀的文件都交给本机的8080端口处理
location ~ ^/(upload|html)/ {
root /var/www/html/www.ixdba.net;
expires 30d;
}
七、虚拟主机配置实例
http{server {
listen 80;
server_name www.domain1.com;
access_log xxxx main;
location / {
index index.html;
root /var/www/html/www.domain1.com;
}
}
server {
listen 80;
server_name www.domain2.com;
access_log xxxx main;
location / {
index index.html;
root /var/www/html/www.domain2.com;
}
include /etc/nginx/conf.d/www.domain3.com.conf;
}
}
八、负载均衡配置实例
http {upstream myserver {
server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name www.domain.com 192.168.12.189;
index index.htm index.html;
root /var/www/html/www.domain.com;
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /etc/nginx/conf.d/proxy.conf;
}
}
}
九、Nginx + FastCGI
spawn-fcgi和PHP-FPM是支持PHP的两个FastCGI进程管理器server{
……
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; #ip socket
(fastcgi_pass unix:/tmp/php-fpm.sock;)#Unix socket 根据经验IP socket在高并发访问下比Unix Socket稳定,但UnixSocket速度要比IP socket快
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name; #该指令放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径。
include fastcgi_params;
}
}
优化Nginx中FastCGI参数的实例
fastcgi_cache_path /etc/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastvgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid and 1m;
十、搭建Nginx + Java环境
两种耦合方式:1.将静态页面交给Nginx,动态请求交给后端Tomcat处理
2.将所有请求都交给后端的tomcat去处理,同时利用Nginx自身的负载均衡功能进行多台Tomcat服务器的负载均衡
1> . 动态页面与静态页面的分离
IP_tomcat => 192.168.12.130:8080
server {
listen 80;
server_name www.domain.com;
root /var/www/html;
location /img/ {
alias /var/www/html/img/;
}
location ~ (\.jsp)|(\.do)$ {
proxy_pass http://192.168.12.130:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
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;
}
}
2>多个Tomcat负载均衡的实例
upstream mytomcats {
server 192.168.12.131:8080;
server 192.168.12.132:8080;
server 192.168.12.133:8080;
}
server {
listen 80;
server_name www.domain.com;
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
root /var/www/html/;
}
location / {
proxy_pass http://mytomcats;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
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;
}
}