1、安装监控模块
Nginx中的stub_status模块主要用于查看Nginx的一些状态信息.
本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定:
. /configure –with-http_stub_status_module
配置文件中启动监控
server下:
location /nginx-status {
allow --------
allow --------//允许的ip
deny all;//
stub_status on;
access_log off;
}
2、启用websocket代理
由于websocket只有在连接是使用了http协议,之后边返回101改变协议为websocket,所以需要特殊对websocket做配置
http://nginx.org/en/docs/http/websocket.html
location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
A more sophisticated(复杂) example in which a value of the “Connection” header field in a request to the proxied server depends on the presence of the “Upgrade” field in the client request header:
http { map $http_upgrade $connection_upgrade { default upgrade; ‘‘ close; } server { ... location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }
By default, the connection will be closed if the proxied server does not transmit any data within 60 seconds. This timeout can be increased with the proxy_read_timeout directive. Alternatively, the proxied server can be configured to periodically send WebSocket ping frames to reset the timeout and check if the connection is still alive.
我的配置文件:详解
##定义Nginx运行的用户和用户组,user user [group],没有group是默认和user相同 user nginx www; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] #最后一个参数为级别 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #进程文件,进程pid放到这个文件中,用于作为参数使用 pid logs/nginx.pid; #nginx进程数,建议设置为等于CPU总核心数。 #设置为“auto”将尝试自动检测它 worker_processes 2; #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。 #如果不确定,这个不要配,nginx会自动使用合适的值,也可以叫做文件描述符数量 #worker_rlimit_nofile 65535; #event指令,工作模式与连接数上限 events { #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。 use epoll; #告诉nginx收到一个新连接通知后接受尽可能多的连接。 multi_accept on; #单个进程最大连接数(最大连接数=连接数*进程数) worker_connections 2048; } http { #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。 #log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ # ‘$status $body_bytes_sent "$http_referer" ‘ # ‘"$http_user_agent" "$http_x_forwarded_for"‘; #access_log logs/access.log main; #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #默认编码 #charset utf-8; #服务器名字的hash表大小,用于使用负载均衡时防止串session server_names_hash_bucket_size 128; #server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。 server_tokens off; #可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。 #Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区, #write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。 #因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效 ##开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。 sendfile on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送 #tcp_nopush on; #告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。 #tcp_nodelay on; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。秒。 keepalive_timeout 65; #设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。 client_header_timeout 10; client_body_timeout 10; #开启目录列表访问,合适下载服务器,默认关闭。 autoindex on; #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 reset_timedout_connection on; #send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。 send_timeout 10; #limit_conn_zone设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。 limit_conn_zone $binary_remote_addr zone=addr:5m; #limit_conn为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。 limit_conn_zone $binary_remote_addr zone=addr:5m; # gzip压缩功能设置 gzip on; #为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。 gzip_disable "msie6"; #告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。 #gzip_static on; #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。 #gzip_proxied #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。 gzip_min_length 1k; #压缩缓冲区 gzip_buffers 4 16k; ##压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_http_version 1.0; #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。 gzip_comp_level 6; #设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。mime用空格隔开。 gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on; #上传文件大小限制 #client_header_buffer_size 32k; #设定请求缓存 large_client_header_buffers 4 64k; # http_proxy 设置 client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 75; proxy_send_timeout 75; proxy_read_timeout 75; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_temp_path /usr/local/nginx/proxy_temp 1 2; # 设定负载均衡后台服务器列表 #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。 #backend为服务器name upstream backend { #ip_hash; server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; #server 192.168.80.121:80 weight=3; #server 192.168.80.122:80 weight=2; #server 192.168.80.123:80 weight=3; } # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。 #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; # cache informations about file descriptors, frequently accessed files # can boost performance, but you need to test those values #打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。 open_file_cache max=100000 inactive=20s; #在open_file_cache中指定检测正确信息的间隔时间。 open_file_cache_valid 30s; #定义了open_file_cache中指令参数不活动时间期间里最小的文件数。 open_file_cache_min_uses 2; #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。 open_file_cache_errors on; ## # Virtual Host Configs # aka our settings for specific servers ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # 很重要的虚拟主机配置 server { listen 80; #域名可以有多个,用空格隔开 server_name localhost itoatest.example.com; #不确定在这里配有没有用 #index index.html index.htm index.php; #根目录,不确定这里是否有效,一般在location下,这里有可能是全局配置 #在这个目录下根据请求地址找文件. #root /home/html/angular; #日志格式设定 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 logs/host.access.log main; charset utf-8; #对 / 所有做负载均衡+反向代理 location / { root /apps/oaapp; index index.jsp index.html index.htm; proxy_pass http://backend; proxy_redirect off; # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } #静态文件,nginx自己处理,不去backend请求tomcat,正则表达式以~开头 location ~* /download/ { root /apps/oa/fs; } #php文件,交给CGI来处理 location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #本地动静分离反向代理配置 #所有jsp的页面均交由tomcat或resin处理 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; } #图片缓存时间设置 location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /apps/oaapp; #缓存时长 expires 7d; } #JS和CSS缓存时间设置 location ~ .*\.(js|css)?$ { expires 1h; } location /nginx_status { stub_status on; access_log off; //允许哪个ip查看 allow 192.168.10.0/24; deny all; } #设定查看Nginx状态的地址 #location /NginxStatus { # stub_status on; # access_log on; # auth_basic "NginxStatus"; # auth_basic_user_file conf/htpasswd; # #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。 #} #禁止直接访问WEB-INF文件夹 location ~ ^/(WEB-INF)/ { deny all; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #配置二级域名,$host代表访问的地址,用正则表达式匹配,再使用rewrite模块把地址重写 if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) { set $subdomain $1; } location / { rewrite ^/$ /blog/$subdomain last; proxy_pass http://www.mydomain.com/; } } ## 其它虚拟主机,server 指令开始 server { listen 80; server_name node.ailiailia.com; location / { proxy_pass http://localhost:3000/; proxy_set_header Host $host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 60; proxy_read_timeout 600; proxy_send_timeout 600; } location /status { stub_status on; access_log off; } location /.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location /.(js|css)?$ { expires 12h; } } }