1.Nginx -- 是一个高性能的 HTTP 和 反向代理 服务器
优点:
1.高并发连接,稳定,消耗内存和CPU低,开源
2.配置文件简单
3.支持rewrite重写规则 -- 能够根据域名、url的不同,将HTTP请求分到不同的后端服务器群组
4.内置的健康检查功能 -- 如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
5.节省带宽 -- 支持Gzip压缩,可以添加浏览器本地缓存的Header头
6.稳定性高 -- 用于反向代理,宕机概率极低
7.支持热部署 -- 可以7*24小时不间断运行,即使运行数月也不需重启,还能在不间断服务情况下,对软件版本进行升级
8.静态文件处理能力非常强
注意: Nginx在Windows下性能要比Linux下低很多
2.Widows下使用Nginx?
1.开启 start nginx
2.关闭 nginx -s quit
3.其他控制:
nginx -s [stop|quit|reopen|reload]
3.Linux下Nginx的安装?
1.安装:
tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
./configure
make
sudo make install
以上命令,Nginx将被默认安装到/usr/local/nginx目录下, 可通过 ./configure --help 查看Nginx可选的编译选项
4.Linux下Nginx的启动、停止、平滑重启?
1.启动Nginx: 如果Nginx安装在 /usr/local/nginx目录中
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
说明: 参数 -c 只定了配置文件的路径,如果不加 -c 参数,Nginx会默认加载器安装目录的conf子目录中的nginx.conf文件,
本例中即: /usr/local/nginx/sbin/conf/nginx.conf
2.Nginx的停止: -- 一般通过发送系统信号给Nginx的主进程的方式来停止Nginx
1.通过ps命令查找Nginx的主进程号: ps -ef | grep nginx
备注信息为 "master process" 的Nginx进程是 主进程,另外几个 "work process" 为子进程, 前面表示的时主进程号
2. 几种停止Nginx的方式:
1.从容停止Nginx:
kill - QUIT Nginx主进程号
或
kill - QUIT '/usr/local/webserver/nginx/logs/nginx.pid'
2.快速停止Nginx:
kill - TERM Nginx主进程号
或
kill - TERM '/usr/local/webserver/nginx/logs/nginx.pid'
kill - INT Nginx主进程号
或
kill - INT '/usr/local/webserver/nginx/logs/nginx.pid'
3.强制停止所有Nginx进程:
pkill -9 nginx
3.Nginx的平滑重启:
1.先检测配置文件的正确性:
如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,通用可以通过发送系统信号给Nginx主进程的方式进行, 不过重启之前,要确认Nginx配置文件的 语法是否正确,否则Nginx将不会加载新的配置文件
通过以下命令判断Nginx配置文件 是否正确:
/usr/local/webserver/nginx/sbin/nginx -t -c
/usr/local/webserver/nginx/conf/nginx.conf
如果配置文件不正确,屏幕会提示那几行出错,
如果配置文件正确,将会显示两行信息:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful
2.平滑重启 Nginx:
kill -hup Nginx主进程号
或
kill -hup '/usr/local/webserver/nginx/logs/nginx.pid'
说明:当Nginx接收到HUP信号时,它会尝试先解析配置文件,如果成功就应用新的配置文件, 之后Nginx运行新的工作进程并从容关闭旧的工作进程,
通知工作进程关闭监听套接字,但继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。
如果新的配置文件应用失败,Nginx将继续使用旧的配置进行工作
4.Nginx的信号控制: 几种信号
1.TERM,INT 快速关闭
2.QUIT 从容关闭
3.HUP 平滑重启,重新加载配置文件
4.USR1 重新打开日志文件,在切割日志时用途较大
5.USR2 平滑升级可执行程序
6.WINCH 从容关闭工作进程
5.Nginx的平滑升级?
-- 当需要将正在运行中的Nginx升级、添加、删除服务器模块时,可在不中断服务的情况下,使用新版本、重编译的Nginx替换旧版本的可执行程序
步骤:
1.使用新的可执行程序替换旧的可执行程序 -- 对于编译安装的Nginx,可将新版编译安装到旧版的Nginx安装路径中, -- 最后备份旧版可执行文件
2.发送指令 :
kill -USR2 旧版本的Nginx主进程号
3.旧版Nginx的主进程将重命名它的.pid文件为 .oldbin(/usr/local/webserver/logs/nignx.pid.oldbin),
然后执行新版的Nginx可执行程序,依次启动新的主进程和新的工作进程
4.此时新、旧版Nginx会同时运行,通过处理输入的请求,要逐步停止旧版本的Nginx实例,必须发生WINCH信号给旧的主进程,然后,它的工作进程将开始从容关闭
kill -WINCH 旧版本的Nginx主进程号
Nginx的基本配置与优化
1. Nginx的配置构成: 一个核心 + 多个模块
一个核心: --- 主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能,还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互
多个模块: --- 实现跟协议相关的功能和某应用特有的功能
--- 模块大致分类:
事件模块
阶段性处理器
输出过滤器
变量处理器
协议
upstream
负载均衡
事件模块 -- 主要用于提供OS独立的事件通知机制,eg:kqueue或epoll等
协议模块 -- 主要负责实现Nginx通过 http、tls/ssl, smtp、pop3以及imap与对应的客户端建立会话。
Nginx核心模块 : Main 和Events
此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。
2.Nginx主配置文件: 由几个段组成,每个段的定义格式如下: 每一个指令都必须使用分号(;)结束,否则为语法错误
格式:
<section>{
<directive> <parameters>;
}
3.Nginx配置文件的主要结构:
##Main段,定义全局属性
events{
##定义不同IO模型下的工作机制
}
http{
##定义作为Web服务器的相关属性(还可以反向代理mail)
server{
##定义一个虚拟主机的属性,所有Web服务必须定义成一个虚拟主机,与httpd不同
location [option] uri{
##定义一个URI的特性
##location中可以嵌套location
location [option] uri {
#嵌套location
}
if(condition){
##定义URL重写
}
}
}
}
upstream <Name>{
##将多个server结合在一起,实现负载均衡
}
4.Nginx中个分段详解:
Nginx 的配置文件主要分为4部分:
main (全局设置) -> 此部分设置的指令将影响其它所有设置
server (主机设置) -> 主要用于指定 "主机" 和 "端口"
upstream (负载均衡设置) -> 用于负载均衡location (URL 匹配特定位置的设置)
location (URL 匹配特定位置的设置) -> 匹配网页文件的类型和位置
-- Main段: 定义Nginx的全局属性
1.定义Nginx运行的用户和用户组
user www www;
2.进程相关的设置
Nginx进程数,建议设置为等于CPU总核心数或总核心数的2倍
worker_processes 4;
通过sched_setaffinity()将worker绑定至CPU上,只能用于main上下文。语法格式为:
#worker_cpu_affinity cpumask ...
worker_cpu_affinity 0001 0010 0100 1000; ##绑定在1-4号cpu上
timer_resolution用于降低gettimeofday()系统调用的次数。默认情况下,每次从kevent()、epoll、/dev/poll、select()或poll()返回时都会执行此系统调用。语法格式为:
timer_resolution 100ms
3.日志设置:
全局错误日志定义类型: [file|stderr[ debug | info | notice | warn | error | crit | alert |emerg ]]
另外: 日志还可以定义在http、server和location上下文中,语法格式一样
#error_log file | stderr [ debug | info | notice | warn | error | crit | alert | emerg ]
4.定义进程文件:
pid logs/nginx.pid;
#pid /var/run/nginx.pid
5.Main段的示例配置:
worker_processes 16;
error_log logs/error.log;
pid logs/nginx.pid
--- events段: 定义工作模式与连接数上限
1.参考时间模型: use [kqueue | rtsig | epoll | /dev/epoll | select | poll ];
注: epoll 是Linux系统中的高性能网络IO模型, FreeBSD中建议使用 kqueue模型
eg: use epoll;
2.最大连接数:
设定每个worker所处理的最大连接数, 它与来自main上下文的worker_processes一起决定了maxclients的值
算法: 最大连接数 = 连接数 *进程数
eg: worker_connections 20000;
注意:
在反向代理场景中,其计算方法与上述公式不同,因为默认情况下浏览器将打开2个连接,而nginx会为每一个连接打开2个文件描述符,因此,其maxclients的计算方法为:
max clients = worker_processes * worker_connections/4
3.Events段配置示例:
events{
use epoll;
worker_connections 2048;
}
--- http段: 定义http服务器属性,含location、upstream等
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 www.toxingwang.com {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.8.101:80 weight=3;
server 192.168.8.102:80 weight=2;
server 192.168.8.103:80 weight=3;
}
#虚拟主机的配置
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.feiku.com feiku.com;
index index.html index.htm index.php;
root /data/www/feiku;
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/feikuaccess.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; }
}
}
--- 几个重要的模块配置:
--- 1. http服务器配置中的 Gzip配置:
##以下是httpGzip模块配置
#httpGzip modules
gzip on; //开启gzip压缩
gzip_min_length 1k; //设置允许压缩的页面最小字节数 , 当响应内容大小大于多少bytes后使用gzip
gzip_buffers 4 16k; //申请4个单位为16K的内存作为压缩结果流缓存
gzip_http_version 1.1; //设置识别http协议的版本,默认是1.1
gzip_comp_level 2; //指定gzip压缩比,1-9 数字越小,压缩比越小,速度越快. 级别越高压缩率越高,但是相应的耗cpu
gzip_types text/plain application/x-javascript text/css application/xml; //指定压缩的类型 # 对于什么类型的内容使用gzip
gzip_vary on; //让前端的缓存服务器存经过gzip压缩的页面
--- 2. Nginx的server虚拟机配置:两种方式一种是直接在主配置文件中设置server字段配置虚拟主机,另外一种是使用include字段设置虚拟主机,这样可以减少主配置文件的复杂性
##以下是server主机设置
server{
listen 80; //监听端口为80
server_name www.feiku.com; //设置主机域名
charset utf-8; //设置访问的语言编码
access_log logs/www.feiku.com.access.log main; //设置虚拟主机访问日志的存放路径及日志的格式为main
##设置虚拟主机的基本信息
location /{
root sites/www; //设置虚拟主机的网站根目录
index index.html index.htm; //设置虚拟主机默认访问的网页
}
##查看Nginx当前的状态情况,需要模块 "with-http_stub_status_module"支持
location /status{
stub_status on;
access_log /usr/local/nginx/logs/status.log;
auth_basic "NginxStatus";
}
}
1. post方法请求静态文件
默认情况下,web服务器都不允许post方法请求静态文件,会返回响应403 Not Allowed。但是有些时候确实有这种需求。可以通过配置文件来改变这种设置:在需要处理静态文件的location里这样配置即可,
- location /static/ {
- root /path/to/files/;
- error_page 405 =200 $uri;
- }
2. Nginx默认一次只能发送50个子请求(subrequest)
在nginx源码中,src/http/ngx_http_request.h文件中:
- #define NGX_HTTP_MAX_SUBREQUESTS 50
3. Nginx location匹配规则
匹配顺序:
a. 字符串匹配,和location块的顺序无关,根据uri匹配所有的location,从而得到一个匹配度最大的location。
b. 正则匹配,按照location块的顺序从前向后,如果找到匹配的location,则直接由该location处理请求。如果所有的location都不匹配,则由在字符串匹配中,匹配度最大的location处理。
匹配规则:
= /uri/ ——字符串精确匹配
^~ /uri/ ——字符串前缀匹配
~ /uri/ ——大小写区分的正则匹配
~* /uri/ ——大小写不区分的正则匹配
@ /uri/ ——命名location,只用于内部重定向请求
其中,如果=和^~匹配成功之后会立即停止搜索,即不再进行正则匹配。
4. 监控Nginx的状态
需要HttpStubStatusModule模块,默认情况是不开启的,所以需要编译时,指定开启这个模块。
- ./configure --with-http_stub_status_modules
- location /nginx_status {
- # copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
- stub_status on;
- access_log off;
- allow SOME.IP.ADD.RESS;
- deny all;
- }
- Active connections: 291
- server accepts handled requests
- 16630948 16630948 31070465
- Reading: 6 Writing: 179 Waiting: 106
5. Nginx启用aio
默认Nginx是没有开启aio的,需要在配置编译时,加上相应选项否则启动Nginx会报错
unknown directive “aio”。
指令:client_max_body_size,用于设置这个值,默认是1m。context可以是http,server或者location。
那么就需要3次请求。下面介绍echo模块实现请求合并。先修改html:
nginx配置文件:
通过这种方式可以有效减少客户端请求,降低服务器端的压力。
7. 通过echo模块合并静态文件请求
正常html中包含多个js文件或者css文件,那么浏览器需要多次http请求才能完成这些文件的加载。比如html文件:- <html>
- <head>
- <script type='text/javascript' src='/static/a.js'></script>
- <script type='text/javascript' src='/static/b.js'></script>
- <script type='text/javascript' src='/static/c.js'></script>
- ……
- </html>
- <html>
- <head>
- <script type='text/javascript' src='/merge?/static/a.js&/static/b.js&/static/c.js'></script>
- ……
- </html>
- location /static/ {
- root /home/www/doc_root;
- }
- location /merge {
- default_type 'text/javascript';
- echo_foreach_split '&' $query_string; # 将查询字符串以&分割
- echo_location_async $echo_it; # 发送子请求到$echo_it对应的location
- echo;
- echo_end;
- }
8. nginx开启gzip
- gzip on; # 开启gzip,默认关闭
- gzip_comp_level 5; # 压缩级别,1-9,级别越高压缩率越高,但是相应的耗cpu
- gzip_min_length 1025; # 当响应内容大小大于多少bytes后使用gzip
- gzip_types text/plain application/x-javascript application/json text/javascript text/css # 对于什么类型的内容使用gzip
一个Nginx配置的完整示例:
8
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
1
#user nobody;
2 worker_processes 2;
3
4
#error_log logs/error.log;
5
#error_log logs/error.log notice;
6
#error_log logs/error.log info;
7
8
#pid logs/nginx.pid;
9
10
11 events {
12 worker_connections 1024;
13 }
14
15
16 http {
17
18
#设定mime类型,类型由mime.type文件定义
19 include mime.types;
20 default_type application
/octet-stream
;
21
22
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
23
# '$status $body_bytes_sent "$http_referer" '
24
# '"$http_user_agent" "$http_x_forwarded_for"';
25
26
#access_log logs/access.log main;
27
28 sendfile on;
29
#tcp_nopush on;
30
31
#keepalive_timeout 0;
32 keepalive_timeout 65;
33
34
#gzip on;
35
36
#后端服务器
37
#使用权重,设置负载均衡参数
38 upstream backend {
39
#server 192.168.0.106:8080 weight=2 max_fails=3;
40
#server 192.168.0.105:8080 weight=1;
41 server 192.168.0.106:8080;
42 server 192.168.0.105:8080;
43 }
44
45
#配置虚拟主机
46 server {
47
48
##监听端口
49 listen 80;
50
51
52
#虚拟主机的名字
53
#使用localhost
54
#server_name localhost;
55
#nginx服务器ip
56
#server_name 192.168.0.106;
57
##使用域名来绑定
58 server_name www.ceit.com;
59
60
#charset koi8-r;
61
62
#access_log logs/host.access.log main;
63
64
#默认请求(拦截/)
65
#location / {
66
# #定义首页索引文件的名称
67
# #index index.php index.html index.htm;
68
#}
69
70 location / {
71 index index.html index.htm;
72
#后面没有配置正斜杠,即绝对根路径。如果配了,
73
#nginx不会把location中匹配的路径部分代理走
74
#通过后端服务器代理,实现负载均衡
75 proxy_pass http:
//backend
;
76
77
#代理部分的参数设置
78 proxy_redirect off;
79 proxy_set_header Host $host;
80 proxy_set_header X-Real-IP $remote_addr;
81 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
82 client_max_body_size 10m;
83 client_body_buffer_size 128k;
84 proxy_connect_timeout 15;
85 proxy_send_timeout 15;
86 proxy_read_timeout 15;
87 proxy_buffer_size 8k;
88 proxy_buffers 4 64k;
89 proxy_busy_buffers_size 128k;
90 proxy_temp_file_write_size 128k;
91 }
92
93
#static file
94 location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm)$ {
95 root
/static
;
96 proxy_pass http:
//backend
;
97 access_log off;
98 expires 30d;
99 }
100
101
#static file
102 location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
103 root
/static
;
104 proxy_pass http:
//backend
;
105 access_log off;
106 expires 24h;
107 }
108 }
109 }
|
多服务器的Nginx配置示例:
user nginx nginx;
worker_processes 2; #相当于cpu个数
error_log logs/nginx_error.log ; #错误日志 crit 日志格式
pid /usr/local/nginx/nginx.pid; #主进程PID保存文件
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535; #文件描述符数量
events
{
use epoll; #网络I/O模型,建议linux使用epoll,FreeBSD使用kqueue
worker_connections 65535; #最大允许连接数
}
http #全局设置
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on; #tcp延迟
keepalive_timeout 60; #保持连接时间
tcp_nodelay on;
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; #fastcgi设置
gzip on; #开启gzip压缩,大大加速网页传输速度,节省了带宽,以下都是gzip的设置
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/html text/text text/plain application/x-javascript text/css application/xml application/x-httpd-php image/jpeg image/png image/gif ;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server #设置网站的基本信息,当有多个server时,就能实现虚拟主机的功能了,我的有4个,因此就有四个虚拟主机
{
listen 80; #监听端口
server_name www.it163.org; #绑定域名
index index.html index.htm index.php; #默认首页
root html; #网站根目录
error_page 404 /404.html; #404错误页面地址
location = /404.html {
root html; #404错误页面地址位置
}
if ( $host = it163.org ) {
rewrite ^ http:// www.it163.org $request_uri redirect;
} #301重定向redirect 表示返回的状态码是301
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$ #解析php文件
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d; #图片格式缓存30天
}
location ~ .*\.(js|css)?$
{
expires 1h; #js/css缓存1小时
}
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 logs/access.log access;
}
server #第二个虚拟主机
{
listen 80;
server_name www.apkpk.com apkpk.com;
index index.html index.htm index.php;
root /web/www.apkpk.com;
error_page 404 /404.html;
location = /404.html {
root /web/www.apkpk.com;
}
if ( $host = apkpk.com ) {
rewrite ^ http://www.apkpk.com$request_uri redirect;
}
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log logs/apkpk.access.log;
}
server #第三个虚拟主机
{
listen 80;
server_name www.tu8cn.com tu8cn.com;
index index.html index.htm index.php;
root /web/www.tu8cn.com;
error_page 404 /404.html;
location = /404.html {
root /web/www.tu8cn.com;
}
if ( $host = tu8cn.com ) {
rewrite ^ http://www.tu8cn.com$request_uri redirect;
}
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log logs/tu8cn.access.log;
}
server #第四个虚拟主机
{
listen 80;
server_name www www.it163.org it163.org
index index.html index.htm index.php;
root /web/www.ecshop.com;
error_page 404 /404.html;
location = /404.html {
root /web/www.tu8cn.com;
}
if ( $host = ecshop.com ) {
rewrite ^ http://www.it163.org $request_uri redirect;
}
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log logs/ecshop.access.log;
}
server #这个不是显示虚拟主机,显示服务器负载情况
{
listen 80;
server_name www.it138.org;
location / {
stub_status on;
access_log off;
}
}
}