一、安装nginx
1、在nginx官方网站下载一个包,下载地址是:
http://nginx.org/download/nginx-1.4.2.tar.gz
2、WinSCP(ftp上传工具).exe FTP 上传工具上传达到CentOS中
3、我是先建一个目录,把要用的到的安装包放到一起.
#mkdir /home/
#tar zxf nginx-1.4.1.tar.gz
#cd nginx-1.4.1
4、安装pcre开发包
#yum install -y pcre-devel
5、如果安装出现在下面的错误是缺少编译环境。安装编译源码所需的工具和库
./configure: error: C compiler cc is not found
#yum install gcc gcc-c++ ncurses-devel perl
6、安装cmake,从http://www.cmake.org下载源码并编译安装
#yum -y install make gcc gcc-c++ ncurses-devel
#yum -y install zlib zlib-devel
7、如果需要ssl功能需要openssl库
#yum -y install openssl openssl--devel
8、安装nginx
#cd nginx-1.4.1
#./configure --prefix =/opt/nginx
#make
#make install
2、WinSCP(ftp上传工具).exe FTP 上传工具上传达到CentOS中
3、我是先建一个目录,把要用的到的安装包放到一起.
#mkdir /home/
#tar zxf nginx-1.4.1.tar.gz
#cd nginx-1.4.1
4、安装pcre开发包
#yum install -y pcre-devel
5、如果安装出现在下面的错误是缺少编译环境。安装编译源码所需的工具和库
./configure: error: C compiler cc is not found
#yum install gcc gcc-c++ ncurses-devel perl
6、安装cmake,从http://www.cmake.org下载源码并编译安装
#yum -y install make gcc gcc-c++ ncurses-devel
#yum -y install zlib zlib-devel
7、如果需要ssl功能需要openssl库
#yum -y install openssl openssl--devel
8、安装nginx
#cd nginx-1.4.1
#./configure --prefix =/opt/nginx
#make
#make install
9、
检查nginx的配置文件是否争取(假如修改过配置文件)
#nginx -t
10、 启动服务
#/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
11、 停止服务
#/opt/nginx/sbin/nginx -s stop
12、查看端口占用情况
#netstat -tunlp
13、如果其它机器无法访问,解决方法如下:
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
然后保存:
#/etc/rc.d/init.d/iptables save
重启防火墙
#/etc/init.d/iptables restart
10、 启动服务
#/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
11、 停止服务
#/opt/nginx/sbin/nginx -s stop
12、查看端口占用情况
#netstat -tunlp
13、如果其它机器无法访问,解决方法如下:
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
然后保存:
#/etc/rc.d/init.d/iptables save
重启防火墙
#/etc/init.d/iptables restart
二、日志文件的配置与切割
2. 指定日志文件存放路径# log_format formatName formaPattern
# access_log savePath logFormat
3. 例子
log_format weblog '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
access_log /data/wslogs/1987.name_access.log weblog;
4. 参数含义
- $remote_addr 和 $http_x_forwarded_for:记录客户端的ip地址。
- $remote_user:记录客户端用户名称。
- $time_local:记录访问时间与时区。
- $request:记录请求的URL与HTTP协议。
- $status:记录请求状态;成功是200。
- $body_bytes_sent:记录发送给客户端文件主体内容大小。
- $http_referer:记录从那个页面链接访问过来的。
- $http_user_agent:记录客户端浏览器的相关信息。
5. 切割:
- 就是把log文件用MV命令剪切到另一个文件,
- 然后再kill -user1重启nginx,在重新生成nginx日志。
- 这样写一段脚本,就可以把log文件每天存储一份了
三、信号控制
- TERM、INT 快速关闭
- QUIT 从容关闭
- HUP 平滑关闭,重新加载配置文件
- USER1 重新打开日志文件,在切割日志时用途较大
- USER2 平滑升级可执行程序
- WINCH 从容关闭工作进程
四、HTTP缓存
1. 相关指令集
- proxy_cache zone_name,该指令用于设置哪个缓存区将被使用,zone_name的值为proxy_cache_path指令创建的缓存区名称
- proxy_cache_path 设置缓存文件存放路径,只能在http标签内配置
- proxy_cache_methods [GET POST HEAD] 设置缓存哪些HTTP方法,默认GET/HEAD
- proxy_cache_min_uses number 设置缓存的最小使用次数,默认1
- proxy_cache_key line 设置web缓存的KEY值,如proxy_cache_key "$host:$server_port$uir$is_args$args"
- proxy_cache_valid code time 对不同返回状态吗设置不同的缓存时间,如proxy_cache_valid 200 302 10m
proxy_cache_path /data/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30glevels指定缓存空间有两层hash目录,第一层目录为一个字母,第二层为2个字母,类似data/cache/c/29/sd8923hsajdlfjaosdcjiajsdoij999;keys_zone参数用来为这个缓存区起名,500m指定缓存空间大小为500M;inactive的1d指如果缓存数据在1天内没有被访问,将被删除;max_size的30g是指硬盘缓存空间为30GB.
五、负载均衡与反向代理
1. Http的Upstream模块
- ip_hash: 让同一IP一直访问同一台机器,保证session正常使用
upstream stream_name {ip_hash;server 192.168.1.12:8080server 192.168.1.15:80}
- server参数
max_fails --在参数fail_timeout指定的时间内请求失败的次数(404除外)
fail_timeout --在max_fails次失败后,暂停的时间
down --标记服务器永久离线,适用于ip_hash
backup --仅在非backup服务器全部宕机或繁忙的时候才启用
六、URL重写Rewrite
1. 标记
- last,表示完成rewrite。使用alias时必须用
- break,本条规则匹配完成后,终止匹配,不再匹配后面的规则。使用proxy_pass时必须用
- redirect,返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
- permanent,返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
2. 重定向URL末尾加?将不会把参数附加到URL后面,否则自动附加参数
- rewrite ^/user?id=1$ http://www.test.com/home? permanent ==> http://www.test.com/home
- rewrite ^/user?id=1$ http://www.test.com/home permanent ==> http://www.test.com/home?id=1
3. 花括号的使用{}
如果在正则中使用了花括号,那么这条正则要用双引号引起来。
rewrite "/image/([0-9]{2})" /image/$1.png;
4. 实例
a. 文件或目录不存在时,重定向到指定页面
if(!-e $request_filename){
rewrite ^/(.*)$ /index.jsp last;}
b. 如果是IE浏览器,重定向到IE目录
if($http_user_agent ~ MSIE){
rewrite ^(.*)$ /IE/$1 break;
}
c. 设置文件缓存时间
location ~ .*\.(gif|png|jpg|bmp|swf)${
expires 30d;
}
location ~ .*\.(js|css)${
expires 1h;
}
d. 示例代码如下:
http{
proxy_temp_path /data0/proxy_temp_path ;
#设置Web缓存区名称为cache_one,内存缓存空间大小为500M,自动清除超过1天没有被
#访问的缓存数据,硬盘缓存空间大小为30G
proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g ;
server{
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
#使用Web缓存区cache_one
proxy_cache cache_one ;
#对不同HTTP状态码缓存设置不同的缓存时间
proxy_cache_valid 200 304 12h ;
proxy_cache_valid 301 302 1m ;
proxy_cache_valid any 1m ;
#设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,
#参数"组合成Key
proxy_cache_key $host$uri$is_args$args;
}
#用于清除缓存,假设一个URL为http://my.domain.com/test.gif,通过访问
#http://my.domain.com/purge/test.gif可以清除该URL的缓存
location ~ /purge(/.*) {
#设置只允许指定的IP或IP段才可以清除URL缓存
allow 127.0.0.1 ;
allow 192.168.0.0/16 ;
deny all ;
proxy_cache_purge cache_one $host$1$is_args$args ;
}
}
}
七、常用配置参数
# 允许客户端请求的最大的单个文件字节数
client_max_body_size 300m;
# 缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;
# 跟后端服务器连接的超时时间,发起握手等候响应超时时间
proxy_connect_timeout 600;
# 连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理
proxy_read_timeout 600;
# 后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有数据
proxy_send_timeout 600;
# 代理请求缓存区,这个缓存区会保存用户的头信息以供Nginx进行规则处理,一般只要能保存下头信息即可
proxy_buffer_size 16k;
# 临时缓存文件大小
proxy_temp_file_write_size 64k;
# 对网页文件、css、JS、XML等启动gzip压缩,减少数据传输量,提高访问速度
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
八、安装第三方模块
1. 安装第三方模块的时候需要覆盖原来nginx文件,代码如下:
./configure --prefix/nginx安装目录 --add-module=/第三方模块的目录