- 一般主文件nginx.conf
user jianer users; #执行worker的用户worker_processes 4; #worker启动的个数,应该为CPU核心数+1,能达到最大效率error_log logs/error.log;#错误日志记录的位置pid logs/nginx.pid; #记录主nginx启动的PID文件events { use epoll; #定义I/O使用模型 worker_connections 10240; #每个worker最多能处理的连接。总连接数为worker_processes*worker_connections,根据实际运行情况来动态调整}http { #除了定义http服务外,还可以定义https服务 include kelude/*.upstream; #导入外部的文件,nginx中可以导入任意可读的文件作为配置文件一部分 include mime.types; #导入文件类型 default_type application/octet-stream; #默认的文件类型 proxy_intercept_errors on; # 打开后,应用的状态码可以传到nginx,再处理 fastcgi_intercept_errors on; #打开后,nginx可以自定义错误码的页面显示处理 #定义日志格式,main只是一个标识,后面的内容才是格式内容 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' ' request_time:$request_time s'; access_log logs/access.log main; #access.log对应的位置 sendfile on; #使用xsendfile功能去存放资料的盘中下载这个文件,不用web服务器再去处理,可以有效提升文件下载效率 keepalive_timeout 65; #超过这个时间,表示应用未响应,返回504或者路由到下一个upstream client_max_body_size 50m; #指定最大的body内容 gzip on; #开启gzip压缩编码方式 include kelude/*.server; #加载其他配置,可以用*表示任意字符,批量加载文件}?
- server示例
server { listen 80; #可以写相同的端口多次,server_name不一样即可 server_name daily.kelude2.taobao.net; #hostname access_log logs/kelude2.log main; #访问日志重新定义 location / { rewrite ^/(.*)$ http://daily.kelude.taobao.net/$1 permanent; #重写所有URL到另外的URL,浏览器会返回301 }}?
- Location优先级
1、 ~*不区分大小写 2、 ~区分大小写 3、 location = 大于 location ^~ 大于 location ~/*~ 大于 location /
- Location示例
Location的作用是将url进行规则的解析,然后指定哪些URL该由哪些Location来处理,一个url可以同时被多个Location处理,比如先rewrite一下,再去另外的Location匹配处理
location ^~ /projects { proxy_pass http://project_service; #可以直接指定upstream,不指定后续URL,这样会自动proxy_pass到http://project_service/projects proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ^~ /pm { proxy_pass http://10.235.168.91:18009/pm; #也可以指定好proxy_pass的具体路径,通常情况下都是后缀一致 proxy_set_header Host $host; #设定好此项,可以将响应头中的Host设置为当前server的hostname proxy_set_header X-Real-IP $remote_addr; #设定好此项,可以在Header中设置好用户的真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设定好此项,可以将用户的Proxy路径显示出来。比如从10.13.24.24到10.232.23.23的nginx,10.232.23.23的nginx又proxy_pass到了10.232.23.43,那么10.232.23.43返回的X-Forwarded-For即为10.13.24.24,10.232.23.23,10.232.23.43}location ~* \.(css|js|gif|jpg|jpeg|png|bmp|ico|cur)$ { #配置静态文件 proxy_pass http://master_service; expires 30d; #过期时间是Header中的Date+30天}location ^~ /athrun/static/athrun { #高级配置示例,有变量,有if判断,动态proxy resolver 8.8.8.8; set $h "invalid"; if ( $arg_token ~ "10321" ){ set $h "10.13.40.81"; } if ( $h ~ "invalid"){ return 404; } proxy_pass http://$h/athrun/$name;}location / { #所以规则未匹配时,匹配到此规则 proxy_pass http://master_service; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ /\.svn/* { #拒绝路径中带.svn的,都返回403状态 deny all;}location = /test_403 { #配置一个最高优先级的location。访问http://hostname/test_403 肯定会到由此location来解析 return 403;}
?
- upstream示例
一个upstream表示一个源,可以是应用,可以是另外的http服务器。一个upstream可以写多个server,如果写多个的话,可以有几种转发方式
upstream mypage_service { server 10.232.23.42:4002; #几种方式:轮洵(默认,依次处理)、weigt(指定权重,任意正整数)、ip_hash(同一IP到只会到同一台,防止session失效)、fair(响应时间路由,响应越快的,得到的路由越多)/url_hash(同一URL只会到同一台server) }
?