Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好javascript
模块依赖性php
gzip模块须要 zlib 库
rewrite模块须要 pcre 库
ssl 功能须要openssl库css
安装PCRE库html
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz tar -zxvf pcre-8.35.tar.gz cd pcre-8.35 ./configure make && make install
安装zlib库java
wget http://zlib.net/zlib-1.2.8.tar.gz tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure make && make install 安装ssl
自由选择是否须要编译mysql
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz tar -zxf openssl-1.0.1g.tar.gz cd openssl-1.0.1g ./config make && make install
安装nginxnginx
cd nginx ./configure --prefix=/usr/local/nginx make & make install
启动nginxweb
cd/usr/local/nginx ./sbin/nginx
配置nginx开机自动启动sql
打开/etc/rc.d/rc.local文件添加nginx文件路径 /usr/local/nginx/sbin/nginx
重启nginxapache
./sbin/nginx -s reload
查看访问日志
tail -10 logs/haowan.access.log
nginx设置定时分割日志文件
#!/bin/bash LOGPATH=/usr/local/nginx/logs/haowan.access.log // nginx日志原路径 BASEPATH=/date/$(date -d yesterday +%Y%m) //切割后存放目录 mkdir -p $BASEPATH //按月建立文件夹 bak=$BASEPATH/$(date -d yesterday +%d%H%M).haowan.access.log //计算路径与日志命名 mv $LOGPATH $bak touch $LOGPATH kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 添加cut_logs.sh执行权限 chmod +x /usr/local/nginx/date/cut_logs.sh 设置cut_logs.sh启动时间,执行命令crontab -e进入编辑状态: 01 00 * * * /usr/local/nginx/date/runlog.sh 能够用如下方式来执行此脚本: /etc/init.d/nginx start /etc/init.d/nginx stop /etc/init.d/nginx reload /etc/init.d/nginx restart
nginx rewrite重写
nginx经过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。该模块须要PCRE支持,应在编译nginx时指定PCRE源码目录
判断浏览器类型
if ($http_user_agent ~* Mozilla){ rewrite ^.*$ /ie.html; break; } # 404错误页面 if (!-e $document_root$fastcgi_script_name){ rewrite ^.*$ /404.html; break; } if ($http_user_agent ~* Mozilla){ set $isit 1; } if ($fastcgi_script_name ie.html){ set $isie 0; } if($isie 1){ rewrite ^.*$ /ie.html }
php与nginx整合
注意:编译的php要有以下功能:链接mysql,gd,ttf, 以fpm(fascgi)方式运行。
./configure \ --prefix=/usr/local/fastphp\ --with-mysql=/usr/local/mysql\ --with-gd\ --enable-gd-native-ttf\ --enable-gd-jis-conv\ --enable-fpm make && make install 复制php配置文件 cp php.ini-development /usr/local/fastphp/lib/php.ini 复制 php-fpm配置文件 cp etc/php-fpm.conf.default etc/php-fpm.conf 启动php-fpm ./sbin/php-fpm
查看进程
ps aux | grep php
设置nginx.conf文件
php与nginx整合
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; }
nginx gzip压缩提高网站速度
网页压缩是一项由 WEB 服务器和浏览器之间共同遵照的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是如今流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。双方的协商过程以下:首先浏览器请求某个 URL 地址,并在请求的头 (head) 中设置属性 accept-encoding 值为 gzip, deflate,代表浏览器支持 gzip 和 deflate 这两种压缩方式(事实上 deflate 也是使用 gzip 压缩协议。
gzip经常使用参数: gzip on|off #是否开启gzip gzip_buffers 32 4k|16 8k #缓冲 gzip_comp_level[1-9] #推荐6压缩级别 gzip_disable #正则匹配UA 什么样的Uri不进行gzip gzip_min_length 200 #开始压缩的最小长度(再小就不要压缩了) gzip_http_version1.0|1.1 #开始压缩的http协议版本 gzip_proxied #设置请求代理服务器该如何缓存内容 gzip_types text/plain application/xml #对哪些类型的文件用压缩如:text/xml/html/css gzip_vary on|off #是否传输gzip压缩标志 nginx gzip压缩设置 gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 2000; gzip_types text/css text/xml application/x-javascript; nginx的expires缓存设置提升网站性能
Nginx设置expires设定页面缓存时间 不缓存或一直使用缓存 配置expires expires起到控制页面缓存的做用,合理的配置expires能够减小不少服务器的请求
location ~* \.(jpg|jpeg|gif|png){ root html; expires 1d; # 缓存一天 }
反向代理实现 nginx+apache动静分离
nginx反向代理的指令不须要新增额外的模块,默认自带proxy_pass指令,只须要修改配置文件就能够实现反向代理。支持两个用法 proxy与upstream,分别用来作反向代理和负载均衡
#配置apache虚拟主机 <VirtualHost *:8080> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/nginx/html" ServerName "192.168.80.22" ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost> #设置权限 <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Allow from all </Directory> 设置nginx配置文件 .php文件让apache来解析 location ~ \.php$ { proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://192.168.80.22:8080; }
nginx负载均衡配置
*nginx负载均衡主要是对七层网络通讯模型中的第七层应用层上的http、https进行支持。同时nginx更新版本也在逐步对Websocket、SPDY等协议做出支持。
nginx是以反向代理的方式进行负载均衡的。反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给Internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器。*
配置两台虚拟机
server{ listen 81; server_name 127.0.0.1; root html; access_log logs/81-access.log main; } server{ listen 82; server_name 127.0.0.1; root html; access_log logs/82-access.log main; }
把多台服务器用upstream指定绑定在一块儿并起个组名
upstream imgserver{ server 127.0.0.1:81 weight=1 max_fails=2 fail_timeout=3; server 127.0.0.1:82 weight=1 max_fails=2 fail_timeout=3; }
而后用proxy_pass 指向imgserver
location ~* \.(jpg|jpeg|gif|png){ proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://imgserver; }