## nginx
#### web服务
- worker_processes 4; #几核
- events{
- worker_connection 5000; #一个进程可以支持的最大线程
- }
- server{ #一个server一个网站
- listen 80;#监听端口
- server_name localhost; #域名
- location / {
- root html; #网站的路径
- index index.html index.htm;
- }
- error_page 500 502 503 504 /50x.html
- location = /50x.html{
- root html;
- }
- }
#### 分发 虚拟主机/增加server
> 基于端口
- server{ #一个server一个网站
- listen 8080;#监听端口
- server_name localhost; #域名
- location / {
- root htdoc;
- index index.html index.htm;
- }
- }
> 基于域名
- server{ #一个server一个网站
- listen 80;#监听端口
- server_name www.ruofish.com; #域名
- location / {
- root html; #网站的路径
- index index.html index.htm;
- }
- }
> 限速
- limit_zone one $binary_remote_addr 10M; #总带宽10M
- server {
- listen 80;
- server_name www.domain.com;
- location / {
- root html;
- index index.html index.htm;
- limit_rate 10k; #下载速度
- limit_rate_after 200m; #下到200M以后,速度降低为上面那10K
- limit_conn one 1; #允许一个IP同时链接多少次
- }
#### 代理
> nginx 代理与反向代理
- server {
- listen 80;
- server_name www.abc.com;
- location / {
- proxy_pass http://192.168.18.250; #代理
- }
- }
- server {
- listen 80;
- server_name www.abc.com;
- location ~ \.php$ {
- proxy_pass http://192.168.18.250;
- }
- }
> URL重定向
- server {
- listen 80;
- server_name www.abc.com;
- location / {
- rewrite ^/ http://192.168.18.250; #重写
- }
- }
> 防盗链
1. 首先要排除 daolian.jpg
- location ~ daolian\.jpg${
- }
2. 如果不是你的网站链过来的,就显示daolian.jpg这个图片
- location ~* .(gif|jpg|png|swf|flv)$ {
- root /tmp/4;
- valid_referers none blocked www.domain.com *.domain.com;
- if ($invalid_referer) {
- #rewrite ^/ http://www.domain.com/daolian.jpg;
- return 403;
- }
- }
- server {
- listen 80;
- server_name www.domain.com;
- location / {
- root /tmp/186;
- index index.html;
- }
- location ~ daolian.jpg {
- root /tmp/186;
- }
- location ~* .(gif|jpg|png|swf|flv)$ {
- root /tmp/186;
- valid_referers none blocked www.domain.com *.domain.com;
- if ($invalid_referer) {
- rewrite ^/ http://www.domain.com/daolian.jpg;
- }
- }
- }
[官网][1]
- user nginx;
- worker_processes 4; #几核
- worker_rlimit_nofile 102400;
- worker_cpu_affinity 00000001 00000010 00000100 00001000;
- error_log /var/log/nginx/error.log ;
- pid /var/run/nginx.pid;
- events {
- use epoll;
- multi_accept on;
- worker_connections 65535; #一个进程可以支持的最大线程
- }
- http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- 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 /var/log/nginx/access.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 60;
- client_header_timeout 20;
- client_body_timeout 20;
- reset_timedout_connection on;
- send_timeout 20;
- limit_conn_zone $binary_remote_addr zone=addr:10m;
- gzip on;
- gzip_proxied any;
- gzip_min_length 256;
- gzip_comp_level 4;
- gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
- open_file_cache max=100000 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
- include /etc/nginx/conf.d/*.conf;
- #include /etc/nginx/sites-enabled/*;
- }
下面详细讲述一下这个配置文件里面各个参数的意义:
user nginx
#设置运行nginx的用户为nginx,前提是系统上已经存在这个用户
#如果是yum安装的nginx,系统会存在这个用户,但是最好用命令确认一下
#grep "nginx" /etc/passwd 看看是否已经存在nginx用户了
worker_processes 4;
# 设置用4个进程
worker_cpu_affinity 00000001 00000010 00000100 00001000;
#设置把任务向所有的CPU分配,注意,并不是平均分配
multi_accpet on;
#告诉nginx收到一个新连接通知后接受尽可能多的连接
worker_rlimit_nofile 102400;
#设置一个nginx进程打开的最大文件描述符的个数
#Linux对于每个进程打开的文件描述符的个数有限制,一个进程所赋予的最大文件描述符的个数越多,则拥有的资源就越多
use epoll;
#使用epoll这种IO模型
worker_connections 102400;
#每个进程允许的最大连接数
#从理论上说,每个nginx服务器允许的最大连接数=分配的nginx进程数量*每个进程赋予的最大连接数
keepalive_timeout 60;
#设置keepalive超时时间
sendfile on;
#如果不写这个参数,则默认的是pre-sendfile则是在传送数据之前在用户空间申请数据缓冲区,read()将数据从文件那拷贝到这个缓冲区,而write()则将缓冲区数据写入网络。
#因为是从用户空间申请缓冲区,效率较低,而sendfile()是将数据从磁盘读到OS缓存,这种拷贝是在内核完成的,效率高
#sendfile()比read()和write()以及打开关闭丢弃缓冲更加有效
tcp_nopush
#告诉nginx在一个数据包里发送所有的头文件,而不是一个接一个的发送
tcp_nodelay
#告诉nginx不要缓存数据,而是一段一段的发送,当需要及时的发送数据的时候,就应该设置这个属性
client_header_buffer_size 4k;
#允许客户端请求头部的缓冲区的大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过1K,不过由于系统内存分页都大于1K,所以这里设置为分页大小,分
#页大小可以用命令getconf pagesize来取得
gzip on
#表示启用压缩,以压缩的形式发送数据,这回减少发送的数据量
gzip_disable
#为指定的客户端禁用gzip功能,比如gzip_disable "msie6"
gzip_static
#告诉nginx在压缩资源之前,先查找是否有gzip预先处理过的资源,这要求预先压缩文件,从而允许使用最高的压缩比,那么nginx就不需要再来压缩这些文件了
gzip_proxied
#表示允许或者禁止压缩基于请求和响应的响应流,如果设置为any,则表示会压缩所有的请求
gzip_min_length
#设置对数据启用压缩的最少字节数,比如可以设置请求少于1000字节,就不要压缩,因为压缩过小的数据反而会降低处理此请求的所有进程的响应速度
gzip_comp_level
#设置数据的压缩等级,这个等级设置的值的范围在1~9,其中9表示压缩比最大,一般设置为4
gzip_type
#设置需要压缩的数据格式
open_file_cache max=102400 inactive=20s
#为打开的文件指定缓存,默认没有启用,max指定缓存数量,建议的值和打开文件描述符的个数一致,inactive指的是经过多长时间文件没被请求后删除缓存
open_file_cache_valid 30s;
#指的是多长时间检查一次缓存的有效信息
open_file_cache_min_users 1;
#指的是open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符在缓存中一直是打开的。
--------------------------------------------------------------------------------
经过初步测试,对于这些值的调整将起到作用较为显著:
增大nginx的进程数 worker_processes
启用尽可能的多进程模式 multi_accept on;
启用epoll use epoll;
减小keepalive_timeout的值 keepalive_timeout 30;
对提高nginx的最大并发数有较好的作用
[1]: http://www.nginx.org