centos7添加nginx 服务并自启动

作为服务,开机后启动

增加以下内容
[root@centos ~]# vi /usr/lib/systemd/system/nginx.service

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile= /usr/local/nginx/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[root@centos ~]# systemctl enable nginx.service

[root@centos ~]# systemctl list-unit-files|grep enabled|grep nginx

启动服务

[root@centos ~]# systemctl daemon-reload
[root@centos ~]# systemctl start nginx.service
[root@centos ~]# systemctl status nginx.service -l
[root@centos ~]# ps -ef|grep nginx

#这样也可以 但是不太标准
systemctl start nginx

linux下nginx多版本php共存

*******************
npp nginx+ 多php

前提 原来的lnmp 已编译安装成功

1.编译安装PHP-5.3在新的路径(/usr/local/php53) 下,注意–prefix、–with-config-file-path的路径,并且打开fastcgi和fpm选项:

./configure --prefix=/usr/local/php53 --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-config-file-path=/usr/local/php53/etc --with-config-file-scan-dir=/usr/local/php53/etc/php.d --with-openssl=/usr/local/openssl --with-zlib=/usr/local/zlib --with-curl --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --enable-zip --with-mysql=/usr/local/mysql --with-mysqli=mysqlnd --with-mcrypt=/usr/local/libmcrypt --without-pear --with-libxml-dir=/usr --enable-xml --with-mhash --disable-rpath --enable-bcmath --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/ --enable-magic-quotes --enable-safe-mode --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --with-gettext --disable-fileinfo;

make -j2 ZEND_EXTRA_LIBS='-liconv' && make install

2.php相关配置

cd /data/tmp/36nmp/
\cp php.ini-production5.3 /usr/local/php53/etc/php.ini
cd -
cp (php -5.3.x-source-dir)/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm53
chmod +x /etc/rc.d/init.d/php-fpm53
chkconfig php-fpm53 on
mv /usr/local/php53/etc/php-fpm.conf.default /usr/local/php53/etc/php-fpm.conf

vi /usr/local/php53/etc/php-fpm.conf #,监听端口:

127.0.0.1:9001

#或者监听文件:
/path/to/unix/socket

其他参数根据服务器环境和需求自行定制。

#启动php-fpm,以后可以通过php-fpm进行管理:
/etc/rc.d/init.d/php-fpm53 start

5.3.3的php-fpm脚本支持的操作:start|stop|force-quit|restart|reload|status
php-fpm支持的操作:
■start,启动PHP的FastCGI进程。
■stop,强制终止PHP的FastCGI进程。
■quit,平滑终止PHP的FastCGI进程。
■restart, 重启PHP的FastCGI进程。
■reload, 重新加载PHP的php.ini。
■logrotate, 重新启用log文件。

3. nginx配置,对需要的服务配置使用PHP-5.3:

location ~ .*\.php?$ {
include /usr/local/nginx/conf/fcgi.conf;
fastcgi_pass 127.0.0.1:9001;

如果要安装php扩展 这里举例一下
tar zxvf imagick-3.1.2.tgz
cd imagick-3.1.2/
/usr/local/php53/bin/phpize
./configure --with-php-config=/usr/local/php53/bin/php-config --with-imagick=/usr/local/imagemagick4php53
make -j2 && make install

关于php5.3安全模式 因为我默认编译参数是打开了安全模式的 如果要关 如下 打开 php.ini
;(使用安全模式)
safe_mode=On

;(关闭安全模式)
safe_mode=Off

关于时区 php.ini
date.timezone = Asia/Shanghai
date.timezone =Asia/Chongqing

logrotate管理nginx日志文件–tag

logrotate

1.
[root@b logs]# cat /etc/logrotate.d/nginx
/usr/local/nginx/logs/*log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
if [ -f /usr/local/nginx/nginx.pid ]; then
#/etc/init.d/nginx restart
kill -HSR1 `cat /usr/local/nginx/nginx.pid`

fi
endscript
}

2.crontab
* 4 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx > /dev/null 2>&1

3.nginx 配置文件
server {
listen 80;

server_name a.com;
charset utf-8;
#access_log off;
ccess_log /usr/local/nginx/logs/access.log main;

nginx信号处理与平滑升级 启动,重启,关闭命令

Nginx进程分为master进程和worker进程,我们可以通过信号来控制master进程。默认情况下,Nginx会把它的master进程id写到 nginx.pid中。你可以在编译的时候通过./configure来指定,或者在配置文件中用pid来配置。

Master进程能够接收并处理如下的信号:

ERM, INT(快速退出,当前的请求不执行完成就退出)
QUIT (优雅退出,执行完当前的请求后退出)
HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程)
USR1 (重新打开日志文件)# 这个日志切割时用得最多
USR2 (平滑的升级nginx二进制文件)
WINCH (优雅的关闭worker进程)
Worker进程也可以接收并处理一些信号:

TERM, INT (快速退出)0
QUIT (优雅退出)
USR1 (重新打开日志文件)
用HUP信号使Nginx加载新的配置文件
当Nginx接收到HUP信号的时候,它会尝试着去解析并应用这个配置文件,如果没有问题,那么它会创建新的worker进程,并发送信号给旧的 worker进程,让其优雅的退出。接收到信号的旧的worker进程会关闭监听socket,但是还会处理当前的请求,处理完请求之后,旧的 worker进程退出。如果Nginx不能够应用新的配置文件,那么仍将用旧的配置文件来提供服务。

在线升级Nginx二进制文件
当你想升级Nginx到一个新的版本,增加或减少module的时候,你需要替换Nginx的二进制文件,你可以平滑的实现它,没有请求会丢失。

首先,用新的二进制文件替换掉旧的,然后发送USR2信号给master进程。master进程会把自己的.pid文件重命名为.oldbin(例 如,/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的二进制文件,从而启动一个新的master进程和新的worker进程:

PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)
33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
在这个时候,有两个Nginx实例在运行,一起处理进来的请求。为了让旧的实例退出,你需要发送WINCH信号给旧的master进程,这样旧master进程的worker进程就会优雅的退出:

PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)

一段时间后,旧的worker进程都已经退出了,只有新的worker进程处理进来的请求:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)

这个时候你仍然可以通过以下几个步骤回滚到旧的服务,因为旧master进程并没有关闭其监听的socket: 发送HUP信号给旧的master进程,它会启动worker进程并且不需要重新加载配置文件 发送QUIT信号给新的master进程,让它优雅的终止其worker进程发送TERM信号给新的master进程,强制其退出 如果一些原因,新的worker进程没有退出,发送KILL信号给它们 当新的master进程退出之后,旧的master进程会删除其pid文件名中的后缀.oldbin,这样一切就又变成升级之前的样子。 如果一个升级已经成功,然后你想只保留新的server,那么发送QUIT信号给旧的master进程让新的server来提供服务:

PID PPID USER %CPU VSZ WCHAN COMMAND
36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
原文:http://wiki.nginx.org/NginxCommandLine

参考
http://www.cnblogs.com/derekchen/archive/2011/02/17/1957209.html

nginx log_format日志配置(转)

nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。
nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的。

1. access_log指令

语法: access_log path [format [buffer=size [flush=time]]];
access_log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;
默认值: access_log logs/access.log combined;
配置段: http, server, location, if in location, limit_except
gzip压缩等级。
buffer设置内存缓存区大小。
flush保存在缓存区中的最长时间。
不记录日志:access_log off;
使用默认combined格式记录日志:access_log logs/access.log 或 access_log logs/access.log combined;

2. log_format指令

语法: log_format name string …;
默认值: log_format combined “…”;
配置段: http

name表示格式名称,string表示等义的格式。log_format有一个默认的无需设置的combined日志格式,相当于apache的combined日志格式,如下所示:

log_format combined ‘$remote_addr – $remote_user [$time_local] ‘
‘ “$request” $status $body_bytes_sent ‘
‘ “$http_referer” “$http_user_agent” ‘;
如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址了。 $remote_addr获取反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录 客户端IP地址和客户端请求的服务器地址。PS: 获取用户真实IP 参见http://www.ttlsa.com/html/2235.html如下所示:

log_format porxy ‘$http_x_forwarded_for – $remote_user [$time_local] ‘
‘ “$request” $status $body_bytes_sent ‘
‘ “$http_referer” “$http_user_agent” ‘;
日志格式允许包含的变量注释如下:

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
[warning]发送给客户端的响应头拥有“sent_http_”前缀。 比如$sent_http_content_range。[/warning]
实例如下:

http {
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘”$status” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for” ‘
‘”$gzip_ratio” $request_time $bytes_sent $request_length’;

log_format srcache_log ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘”$status” $body_bytes_sent $request_time $bytes_sent $request_length ‘
‘[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]’;

open_log_file_cache max=1000 inactive=60s;

server {
server_name ~^(www\.)?(.+)$;
access_log logs/$2-access.log main;
error_log logs/$2-error.log;

location /srcache {
access_log logs/access-srcache.log srcache_log;
}
}
}

ps : 这个logs 目录是在nginx 目录下
3. open_log_file_cache指令

语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
默认值: open_log_file_cache off;
配置段: http, server, location

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:
参数注释如下:
max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁用缓存
实例如下:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
4. log_not_found指令

语法: log_not_found on | off;
默认值: log_not_found on;
配置段: http, server, location
是否在error_log中记录不存在的错误。默认是。

5. log_subrequest指令

语法: log_subrequest on | off;
默认值: log_subrequest off;
配置段: http, server, location
是否在access_log中记录子请求的访问日志。默认不记录。

6. rewrite_log指令

由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx重写规则指南
语法: rewrite_log on | off;
默认值: rewrite_log off;
配置段: http, server, location, if
启用时将在error log中记录notice级别的重写日志。

7. error_log指令

语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];
默认值: error_log logs/error.log error;
配置段: main, http, server, location
配置错误日志。

from
http://www.ttlsa.com/linux/the-nginx-log-configuration/

# from nginx.conf
log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
include /usr/local/nginx/conf/vhost/*.conf;

相关说明
$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
$remote_user :用来记录客户端用户名称;
$time_local : 用来记录访问时间与时区;
$request : 用来记录请求的url与http协议;
$status : 用来记录请求状态;成功是200,
$body_bytes_s ent :记录发送给客户端文件主体内容大小;
$http_referer :用来记录从那个页面链接访问过来的;
$http_user_agent :记录客户毒啊浏览器的相关信息;

http://www.ttlsa.com/linux/the-nginx-log-configuration/

nginxlog切割脚本

#!/bin/bash
#vi cutlog.sh 不错的切割脚本 其实s135.com的写得更加简单呢
##查找nginx进程
nginx_bin=`ps aux | grep nginx | grep root | grep -v 'grep nginx' | awk '{print $14}'`
if [ $nginx_bin == /usr/local/nginx/sbin/nginx ];then
##如果nginx进程在,就找到配置文件,读取accesslog路径
#ACCLOG=`cat /usr/local/nginx/conf/nginx.conf | grep ' access_log' | awk '{print $2}'`
ACCLOG=`cat /usr/local/nginx/conf/hosts/1.conf | grep 'access_log' | awk '{print $2}' | cut -d";" -f1`
##同上错误日志的路径 这两个是假设nginx配置文件只有一个的情况下的
ERRLOG=`cat /usr/local/nginx/conf/nginx.conf| grep ^error | awk '{print $2}'| cut -d";" -f1`
## #查看是否有此文件
file $ACCLOG && file $ERRLOG
if [ $? -eq 0 ];then
###重命名当前日志
mv $ACCLOG $ACCLOG.`date -d "-1 day" +%F`
mv $ERRLOG $ERRLOG.`date -d "-1 day" +%F`
##创建空日志
touch $ACCLOG ;touch $ERRLOG
##修改属主
chown www:www $ACCLOG;chown www:www $ERRLOG
# #判断进程,并重新加载(这里的kill -USR1会使nginx将新产生的日志写到刚创建的新日志里面。) 其它我喜欢用 /etc/init.d/nginx reload
#[ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
/etc/init.d/nginx reload
#压缩日志
gzip $ACCLOG.`date -d "-1 day" +%F`
gzip $ERRLOG.`date -d "-1 day" +%F`
# #将10天前的老日志清理到其他地方,(你们如果想删除的可以自己改成删除)
mv $ACCLOG.`date -d "-10 day" +%F`.gz /data/history.nginx.log/
mv $ERRLOG.`date -d "-10 day" +%F`.gz /data/history.nginx.log/
fi
fi

#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

nginx 调优

1 nginx指令中的优化(配置文件)

1) nginx进程数,
worker_processes
建议按照cpu数目来指定,一般为它的倍数。

2)使用epoll的I/O模型
use epoll;

3)一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
worker_rlimit_nofile 102400;

4) 每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
worker_connections

5)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。

client_header_buffer_size 4k;

6)keepalive超时时间。

7)使用gzip 缓存 css js 图片等
2 内核参数的优化

3 FastCGI参数优化

fastcgi_connect_timeout 300;
指定连接到后端FastCGI的超时时间。

fastcgi_send_timeout 300;
向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。

fastcgi_read_timeout 300;
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。

60
同时处理的并发请求数,即它将开启最多60个子线程来处理并发连接。

102400
最多打开文件数。

204800
每个进程在重置之前能够执行的最多请求数。

等等

书 p 171
http://showerlee.blog.51cto.com/2047005/1287869

http://opkeep.com/system/linux/nginx-optimize.html
http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8

nginx 相比apache优点

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。

1可以高并发连接 2-4W并发
epool kqueue 网络I/O模型,而apache 使用传统的select 模型,pfefork模式为多进程模式,要经常派生子进程,所以用资源会高得多

2内存消耗少,轻量级,高性能

3成本低廉 不像什么F5

4 配置文件非常简单, Apache 比较复杂

5 其它理由
支持rewrite规则 内置的健康检查功能 节省带宽(gzip) 稳定性高 支持热部署 社区活跃,各种高性能模块出品
在见,nginx 在反向代理,rewrite规则,稳定性,静态文件处理,内存消耗等方面有很大的优势

其它
Apache在处理动态有优势,Nginx并发性比较好

http://lnmp.org/nginx.html
http://www.phpzixue.cn/detail1174.shtml

nginx+php+mysql 小内存VPS服务器优化

nginx+php+mysql 小内存VPS服务器优化

vi /usr/local/nginx/conf/hosts/1.conf
fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass unix:/tmp/php-cgi.sock;

vi /usr/local/php/etc/php-fpm.conf
listen = 127.0.0.1:9000
;listen = /var/run/php-fpm.sock

/etc/init.d/php-fpm restart
/etc/init.d/nginx restart

这几天试了一下,感觉好像不太对 还是tcp比 Unix Socket更快呢,特意mark一下

参考 p170

nginx.conf说明

其实很多人还不能完全记得nginx.conf 记录一下,哈哈

#定义Nginx运行的用户和用户组
user www www;

#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 8;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;

#进程文件
pid /var/run/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;

#工作模式与连接数上限
events
{
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
}

#设定http服务器
http
{
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
#charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒

#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;

#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

upstream blog.ha97.com {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}

#虚拟主机的配置
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.ha97.com ha97.com;
index index.html index.htm index.php;
root /data/www/ha97;
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#图片缓存时间设置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*.(js|css)?$
{
expires 1h;
}
#日志格式设定
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 /var/log/nginx/ha97access.log access;

#对 “/” 启用反向代理
location / {
proxy_pass http://127.0.0.1:88;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}

#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
}

#本地动静分离反向代理配置
#所有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;
}
#所有静态文件由nginx直接读取不经过tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
}
}

更详细的模块参数请参考:http://wiki.nginx.org/Main
http://www.ha97.com/5194.html