您的位置:首页 > 运维架构 > Nginx

nginx配置conf文件URL匹配

2015-05-26 17:02 369 查看
1 扩展名为.jpg,.gif.jpeg等文件交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天

location ~ .*\.(gif|jpg|jpeg|png)$ {

root /web/wwwroot/www.ixdba.net;

expires 30d;

}

2 将upload和html下的所有文件交给nginx处理,upload和html目录包含在/web/wwwroot/www.ixdba.net下面

location ~ ^/(upload|html)/ {

root /web/wwwroot/www.ixdba.net;

expires 30d;

}

3 location是对此虚拟主机下动态网页的过滤处理,以下将所有.jsp为后缀的文件都交给本机的8080端口处理

location ~ .*.jsp$ {

index index.jsp;

proxy_pass http://localhost:8080;
}

4 检测配置文件配置是否正确

nginx/sbin/nginx -t 或者nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf

-t 用于检查配置文件是否正确,-c用于指定配置文件路径

显示nginx的版本信息 nginx/sbin/nginx -v

显示nginx的版本信息以及编译参数相关信息 nginx/sbin/nginx -V

平滑重启nginx kill -HUP `cat /opt/nginx/logs/nginx.pid`

关闭nginx kill -QUIT `cat /opt/nginx/logs/nginx.pid`

重新打开一个日志文件 kill -USR1 `cat /opt/nginx/logs/nginx.pid`

平滑升级可执行程序 kill -USR2 `cat /opt/nginx/logs/nginx.pid`

5 负载均衡示例

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.html index.htm;

root /ixda/web/wwwroot;



location / {

proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 error timeout invalid_header;

include /opt/nginx/conf/proxy.conf;

}

}

}

先定义了一个负载均衡组myserver,通过loacation部分实现负载调度,proxy_pass指令指定后端代理服务器的地址和端口

proxy_next_upstream用来定义故障转移策略,当后端节点返回500,502,503,504和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器

inluce指令包含进的proxy文件内容为

proxy_redirect off;

proxy_set_header Host $host;#由后端服务器获取用户的主机名或真实ip地址,以及代理者的真实ip

proxy_set_header X-real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_body_buffer_size 128k;#客户端请求body缓冲区大小,可以理解为先保存到本地,再传递给用户

proxy_connect_timeout 90;#表示与后端服务器连接的超时时间,即发起握手等候响应的超时时间

proxy_send_timeout 90;#后端服务器数据到回传时间,即在规定时间内后端服务器必须传完所有数据,否则nginx将断开这个连接

proxy_read_timeout 90;#nginx从后端的服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,即nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size 4k;

proxy_buffer 4 32k;#缓冲区数量和大小,nginx从后端服务器获取到响应信息,会放置到缓冲区

proxy_busy_buffer_size 64k;#设置系统很忙时可以使用的proxy_bufer大小

proxy_temp_file_write_size 64k;#指定proxy缓存临时文件大小

6 防盗链设置

location ~* \.(gif|jpg|png|swf|flv|wma|asf|mp3)$ {

valid_referers none blocked *.ixdal.net ixdal.net;

if ($invalid_referer) {

rewrite ^/ http://www.ixda.net/img/error.gif;
#return 403;

}

location /images {

root /opt/nginx/html;

valid_referers none blocked *.ixdal.net ixdal.net;

if ($invalid_referer) {

return 403;

}

}

}

如果不是指定的地址格式,则跳转到rewrite指定的地址或者直接返回403错误

7 nginx日志分割

#!/bin/bash

savelog_path='/home/nginx/logs';

nglogs='/opt/nginx/logs';

mkdir -p $savelog_path/$(date +%Y)/$(date +m)

mv $nglogs/access.log $savelog_path/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log

mv $nglogs/error.log $savelog_path/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log

kill -USR1 `cat /opt/nginx/logs/nginx.pid`

8 nginx编译优化

8.1 nginx源码auto/cc/gcc文件,注释或删除掉如下两行

#debug

CFLAGS=" $CFLAGS -g"

8.2 编译参数

--with-cc-opt=' -O3'

--with-cpu-opt=CPU #CPU值为cat /proc/cpuinfo | grep "model name",如pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparcc32,sparc64,ppc64

8.2 内核参数

/etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 1

net.core.somaxconn = 262144

net.core.netdev_max_backlog = 252144

net.ipv4.tcp_max_orphans = 262144

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keeplive_time = 30

vm.overcommit_memory=1

/sbin/sysctl -p使参数生效

net.ipv4.tcp_max_tw_buckets 设定timewait的数量,默认是180 000

net.ipv4.tcp_local_port_range 允许系统打开的端口范围

net.ipv4.tcp_tw_recycle 设定启动timewait快速回收

net.ipv4.tcp_tw_reuse 设置开启重用,允许将TIME-WAIT sockets重新用于新的tcp连接

net.ipv4.tcp_syncookies设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理

net.core.somaxconn默认值为128,用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因此需要结合并发请求数来调节此值

net.core.netdev_max_backlog表示每个网络端口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目

net.ipv4.tcp_max_orphans设置系统中有多少个tcp套接字不被关联到任何一个用户文件句柄上,如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防护简单的Dos攻击,不能过分依赖这个限制甚至人为减小这个值,更多的情况下应该增加这个值

net.ipv4.tcp_max_syn_bakclog记录那些尚未收到客户端确认信息的连接请求的最大值,对于128M内存的系统而言,此值为1024,小内存的系统则为128

net.ipv4.tcp_synack_retries内核放弃连接之前发送SYN+ACK包的数量

net.ipv4.tcp_fin_timeout套接字保持在FIN-WAIT-2状态的时间,默认值为60秒,正确设置这个值很重要,有时即使一个负载很小的web服务器,也会大量的死套接字而产生内存溢出的风险

net.ipv4.tcp_syn_retries内核在放弃连接之前发送SYN包的数量

如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态的时间,接收端可以出错并永远不关闭连接,甚至意外宕机

net.ipv4.tcp_fin_timeout的默认值为60秒,需要注意,有时即使一个负载很小的web服务器,也会大量的死套接字而产生内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最大只消耗1.5KB的内存,但是其生存期长些。

net.ipv4.tcp_keepalive_time表示当keeplive启用的时候,TCP发送keeplive的频度,默认值为2(单位为小时)

vm.overcommit_memory指定内核针对内存分配的策略,可以为0,1,2

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

9 nginx配置支持php

server {

inlucde port.conf;

server_name www.ixdba.net ixdba.net;



location / {

index index.html index.php;

root /web/www/www.ixdba.net;

}

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCIPT_FIENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

通过咯擦提哦你指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,这里到ip地址和端口就是FastCGI进程监听的IP地址和端口

fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/root/local/nginx/html目录,建议这个目录与nginx虚拟主机指定的根目录保持一致,可以不一致

fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装nginx后,会默认生成一个这样的文件,这里通过一个include指令将这个参数配置文件包含进来

FastCGI指令优化,将以下配置添加到nginx主配置文件中到Http层级

fastcgi_cache_path /usr/local/nginx/fastcgi_cache level=1:2 keys_zone=TEST:10m inactive=5m;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffer_size 128k;

fastcgi_temp_file_size 128k;

fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_path为FastCGI缓存文件的路径和目录结构等级,关键字区域存储时间,以及非活动删除时间

fastcgi_connect_timeout连接到后端FastCGI的超时时间

fastcgi_send_timeout指定向FastCGI传送请求的超时时间,已经完成两次握手后向FastCGI传送请求的超时时间

fastcgi_read_timeout指定接收FastCGI应答的超时时间,已经完成两次握手后接收FastCGI应答的超时时间

fastcgi_buffer_size使用一个64KB的缓冲区读取应答的第一部分

fastcgi_buffers指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求

fastcgi_temp_file_size页面大于缓冲区缓存时,大于的部分会缓存到文件,这里指定缓存文件大小

fastcgi_cache表示开启FastCGI缓存并为其指定一个名称,开启缓存非常有用,可以有效降低cpu的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视情况而定

fastcgi_cache_valid用来指定应答代码的缓存时间,示例中表示将200,302应答缓存一个小时,将301应答缓存一天,其他缓存均缓存1分钟

10 nginx和tomcat搭配

server {

listern 80;

server_name www.ixdba.net;

root /web/www/html;

location /img/ {

alias /web/www/html/img;

}

location ~ (\.jsp)|(\.do)|(\.action) {

proxy_pass http://192.168.12.130:8080;
proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remode_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;

}

}

负载均衡配置

upstream mytomcats {

server 192.168.12.131:8000;

server 192.168.12.132:8080;

server 192.168.12.133:8090;

}

location ~ (\.jsp)|(\.do)|(\.action) {

proxy_pass http://mytomcats;
.....

}

注意,如果在location指令中使用正则表达式后再使用alias指令,nginx不支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: