Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
依赖:
yum groupinstall "Development Tools" "Server Platform Development" -y yum install openssl-devel pcre-devel zlib-devel
添加用户组:
groupadd -r nginx useradd -r -g nginx -s /sbin/nologin -M nginx
安装nginx1.6.3:
[[email protected] nginx-1.6.3]# ./configure --prefix=/usr/local/nginx1.6.3 --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --user=nginx --group=nginx --add-module=/tools/ngx_http_consistent_hash-master |tee /tmp/nginx.out
[[email protected] nginx-1.6.3]# make && make install [[email protected] nginx-1.6.3]# mkdir /var/tmp/nginx [[email protected] nginx-1.6.3]# chown -R nginx /var/tmp/nginx [[email protected] local]# cd /usr/local [[email protected] local]# ln -sv nginx1.6.3/ nginx
配置文件高亮
注意原文件路径
nginx.vim 下载地址:http://www.vim.org/scripts/script.php?script_id=1886
[[email protected] .vim]# mkdir ~/.vim/syntax/ -pv [[email protected] ~]# mv /tools/nginx.vim ~/.vim #在附件中 [[email protected] .vim]# cd /root/.vim [[email protected] .vim]# echo ‘au BufRead,BufNewFile /usr/local/nginx1.6.3/conf/*.conf,/usr/local/nginx1.6.3/conf/extra/*.conf if &ft == "" | setfiletype nginx | endif ‘ >> filetype.vim
nginx.conf配置:
[[email protected] conf]# egrep -v ‘^$|#‘ nginx.conf.default >nginx.conf
[[email protected] crontab]# vim /usr/local/nginx/conf/nginx.conf user nginx; #用户 worker_processes auto; #worker进程的个数 cpu个数-1 worker_rlimit_nofile 99999;#打开最大的文件个数 pid /var/run/nginx.pid; events { worker_connections 4000;#每个worker能够并发响应的最大请求数 } http { log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" "$http_x_forwarded_for"‘; include mime.types;#支持多媒体类型 default_type application/octet-stream; sendfile on; #由内核直接转发 异步模式 keepalive_timeout 5; #持久连接5s upstream webservers{ #上游服务器 ip_hash; server martin weight=1 max_fails=2 fail_timeout=2; server lucia weight=1 max_fails=2 fail_timeout=2; } include extra/*.conf; #引入虚拟主机 }
[[email protected] crontab]# vim /usr/local/nginx/conf/extra/demo.conf server{ listen 80; server_name demo.com; #虚拟主机 gzip on; #开启压缩功能 gzip_comp_level 6; #压缩级别6适中 gzip_disable msie6; #不支持ie6 gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json; location / { root /www/web/demo; proxy_pass http://webservers/; #反向代理服务器 proxy_set_header X-Real-IP $remote_addr; #转发客户端ip fastcgi_param SCRIPT_FILENAME scripts$fastcgi_script_name;#转发uri index index.php index.html; } error_page 500 502 503 504 /50x.html; access_log /mydata/nginx/access_log/demo.access.log main buffer=32k; #访问日志开启缓存写入 error_log /mydata/nginx/error_log/error.log notice; #错误日志路径及级别 location /status{ auth_basic ‘let me see see‘; auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd; #添加认证 stub_status on; access_log off; allow 192.168.1.107; #允许ip deny all; #拒绝其它ip } } }
nginx内置变量说明:
[[email protected] conf]# cat /usr/local/nginx/conf/fastcgi_params fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
gzip介绍:
将nginx响应给客户端的报文进行压缩,能够节约带宽并提高响应速度。要使用压缩功能,需要在编译安装时添加Gzip Precompression模块(--with-http_gzip_static_module)。
gzip配置的常用参数:
gzip on|off; #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志
注意:
图片/mp3这样的二进制文件,不必压缩
因为压缩率比较小, 比如100-80字节,而且压缩也是耗费CPU资源的.
比较小的文件不必压缩
gzip on; gzip_comp_level 6; gzip_disable msie6; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
expires介绍:
nginx的缓存设置 提高网站性能
对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.
可以, 用到 nginx的expires设置 .
nginx中设置过期时间,非常简单,
在location或if段里,来写.
格式 expires 30s;
expires 30m;
expires 2h;
expires 30d;
(注意:服务器的日期要准确,如果服务器的日期落后于实际日期,可能导致缓存失效)
URL rewrite:
location / { root /www/b.org; rewrite ^/images/(.*)$ /imgs/$1 last; rewirte ^/imgs/(.*)$ /images/$1; }
这样还是死循环
http://www.b.org/images/a.jpg --> http://www.b.org/imgs/a.jpg 会重新进来然后在匹配
last: 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求;
break: 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由nginx进行后续操作;
redirect: 返回302临时重定向;
permanent: 返回301永久重定向;
一般将rewrite写在location中时都使用break标志
location /status{ auth_basic ‘let me see see‘; auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd; #添加认证 stub_status on; access_log off; allow 192.168.1.107; #允许ip deny all; #拒绝其它ip }
用户认证功Auth Basic模块:
[[email protected] conf]# htpasswd -m -c /usr/local/nginx1.6.3/conf/.htpasswd tom #c创建文件 [[email protected] conf]# htpasswd -m /usr/local/nginx1.6.3/conf/.htpasswd marvin
location /status{ add_header Cache-Control no-store; auth_basic ‘let me see see‘; auth_basic_user_file /usr/local/nginx1.6.3/conf/.htpasswd; stub_status on; access_log off; allow 192.168.1.107; deny all; }
反向代理,负载均衡:
通过upstream模块可定义一个上游服务器组,在反向代理时,将请求代理至这个服务器组,实现负载均衡。upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。
http { upstream webservers{ ip_hash; server martin weight=1 max_fails=2 fail_timeout=2; server lucia weight=1 max_fails=2 fail_timeout=2; } location / { root /www/web/demo; proxy_pass http://webservers/; proxy_set_header X-Real-IP $remote_addr; index index.php index.html; } }
server:定义一个upstream服务器的地址,还可包括一系列可选参数,如: weight:权重; max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定; fail_timeout:等待请求的目标服务器发送响应的时长; backup:用于fallback的目的,所有服务均故障时才启动此服务器; down:手动标记其不再处理任何请求;
over