# https://www.iteye.com/blog/aokunsang-2058787
#运行用户
user nginx;
#启动进程,通常设置成和 cpu 的数量相等
worker_processes auto;
#全局错误日志及 PID 文件
error_log /var/nginx/logs/error.log;
pid /var/nginx/logs/nginx.pid;
# 日志格式
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
# $remote_addr 与$http_x_forwarded_for 用以记录客户端的 ip 地址;
# $remote_user :用来记录客户端用户名称;
# $time_local : 用来记录访问时间与时区;
# $request : 用来记录请求的 url 与 http 协议;
# $status : 用来记录请求状态;成功是 200,
# $body_bytes_s ent :记录发送给客户端文件主体内容大小;
# $http_referer :用来记录从那个页面链接访问过来的;
# $http_user_agent :记录客户毒啊浏览器的相关信息;
# 工作模式及连接数上限
events {
multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接
worker_connections 1024; #单个后台 worker process 进程的最大并发链接数
use epoll; #epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能
}
#设定 http 服务器,利用它的反向代理功能提供负载均衡支持
http {
charset utf-8;
include /etx/nginx/mine.types; #设定 mime 类型,类型由 mime.type 文件定义
sendfile on; #指令指定 nginx 是否调用 sendfile 函数(zero copy方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘 IO重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime
tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay on; #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
#server_tokens off; # 可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
log_not_found off;
types_hash_max_size 2048;
#设置请求体大小
client_max_body_size 16M;
#设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。
client_header_timeout 10;
client_body_timeout 10;
keepalive_timeout 65; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长
gzip on; #开启 gzip 压缩
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
#设定负载均衡的服务器列表
upstream mysvr {
#weigth 参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
server {
listen 80; #侦听 80 端口
server_name www.xx.com; #定义使用 www.xx.com 访问
access_log logs/www.xx.com.access.log access; #设定本虚拟主机的访问日志
root /app;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
error_page 500 502 503 504 /50x.html; # 定义错误提示页面
#默认请求
location / {
proxy_pass http://tomcat:8080/index # 代理
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
#静态文件,nginx 自己处理
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 30d; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点
access_log off;
}
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 30d;
access_log off;
}
}
}
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编
码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个 location 配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当
有匹配成功时候,停止匹配,按当前匹配规则处理请求。