nginx和apache的动静分离配置:
把下面配置放到nginx配置文件相应的server {}里面,如果使用其他端口号,改一下就行:
#所有php的动态页面均交由apache处理
location ~ .(php)?$ {
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:88;
}
#所有静态文件由nginx直接读取不经过apache
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; }
如果之前设置了FastCGI的,把下面的配置注释掉:
-# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-#
-#location ~ .php$ {
-# root /var/www/html;
-# fastcgi_pass 127.0.0.1:9000;
-# fastcgi_index index.php;
-# include fastcgi.conf;
-#}
重启nginx就生效,如图所示,标头显示nginx,phpinfo里面显示是apache,说明动静分离生效。
补充:
** Nginx安装完毕后,会有响应的安装目录,安装目录里nginx.conf为nginx的主配置文件,ginx主配置文件分为4部分,main(全局配置)、server(主机设置)、upstream(负载均衡服务器)和location(URL匹配特定位置的设置),这四者关系为:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。**
一、Nginx的main(全局配置)文件
[root@rhel6u3-7 server]# vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; //指定nginx运行的用户及用户组为nginx,默认为nobody
worker_processes 2; //开启的进程数,一般跟逻辑cpu核数一致
error_log logs/error.log notice; //定于全局错误日志文件,级别以notice显示。还有debug、info、warn、error、crit模式,debug输出最多,crit输出最少,更加实际环境而定。
pid logs/nginx.pid; //指定进程id的存储文件位置
worker_rlimit_nofile 65535; //指定一个nginx进程打开的最多文件描述符数目,受系统进程的最大打开文件数量限制
events {
use epoll; 设置工作模式为epoll,除此之外还有select、poll、kqueue、rtsig和/dev/poll模式
worker_connections 65535; //定义每个进程的最大连接数 受系统进程的最大打开文件数量限制
}
…….
[root@rhel6u3-7 server]# cat /proc/cpuinfo | grep "processor" | wc –l //查看逻辑CPU核数
[root@rhel6u3-7 server]# ulimit -n 65535 //设置系统进程的最大打开文件数量
二、Nginx的HTTP服务器配置,gzip配置。
http {
*****************************以下是http服务器全局配置*********************************
include mime.types; //主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度,DNS主配置文件中的zonerfc1912,acl基本上都是用的include语句
default_type application/octet-stream; //核心模块指令,这里默认设置为二进制流,也就是当文件类型未定义时使用这种方式
//下面代码为日志格式的设定,main为日志格式的名称,可自行设置,后面引用。
log_format main '$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 main; //引用日志main
client_max_body_size 20m; //设置允许客户端请求的最大的单个文件字节数
client_header_buffer_size 32k; //指定来自客户端请求头的headebuffer大小
client_body_temp_path /dev/shm/client_body_temp; //指定连接请求试图写入缓存文件的目录路径
large_client_header_buffers 4 32k; //指定客户端请求中较大的消息头的缓存最大数量和大小,目前设置为4个32KB
sendfile on; //开启高效文件传输模式
tcp_nopush on; //开启防止网络阻塞
tcp_nodelay on; //开启防止网络阻塞
keepalive_timeout 65; //设置客户端连接保存活动的超时时间
client_header_timeout 10; //用于设置客户端请求读取超时时间
client_body_timeout 10; //用于设置客户端请求主体读取超时时间
send_timeout 10; //用于设置相应客户端的超时时间
//以下是httpGzip模块配置
#httpGzip modules
gzip on; //开启gzip压缩
gzip_min_length 1k; //设置允许压缩的页面最小字节数
gzip_buffers 4 16k; //申请4个单位为16K的内存作为压缩结果流缓存
gzip_http_version 1.1; //设置识别http协议的版本,默认是1.1
gzip_comp_level 2; //指定gzip压缩比,1-9 数字越小,压缩比越小,速度越快.
gzip_types text/plain application/x-javascript text/css application/xml; //指定压缩的类型
gzip_vary on; //让前端的缓存服务器存经过gzip压缩的页面
三、nginx的server虚拟主机配置
两种方式一种是直接在主配置文件中设置server字段配置虚拟主机,另外一种是使用include字段设置虚拟主机,这样可以减少主配置文件的复杂性。
*****************************以下是server主机设置*********************************
server {
listen 80; //监听端口为80
server_name www.rsyslog.org; //设置主机域名
charset gb2312; //设置访问的语言编码
access_log logs/www.rsyslog.org.access.log main; //设置虚拟主机访问日志的存放路径及日志的格式为main
location / { //设置虚拟主机的基本信息
root sites/www; //设置虚拟主机的网站根目录
index index.html index.htm; //设置虚拟主机默认访问的网页
}
location /status { // 查看nginx当前的状态情况,需要模块 “--with-http_stub_status_module”支持
stub_status on;
access_log /usr/local/nginx/logs/status.log;
auth_basic "NginxStatus";
}
}
include /usr/local/nginx/server/www1.rsyslog.org; //使用include字段设置server,内容如下
[root@rhel6u3-7 ~]# cat /usr/local/nginx/server/www1.rsyslog.org
server {
listen 80;
server_name www1.rsyslog.org;
location / {
root sites/www1;
index index.html index.htm;
}
}
## 负载均衡配置实例
下面通过Nginx的反向代理功能配置一个Nginx负载均衡服务器。后端有三个服务节点,用于提供Web服务,通过Nginx的调度实现三个节点的负载均衡。
http
{
upstream myserver {
server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name www.domain.com 192.168.12.189;
index index.htm index.html;
root /ixdba/web/wwwroot;
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /opt/nginx/conf/proxy.conf;
}
}
}
在上面这个配置实例中,首先定义了一个负载均衡组 myserver,然后在 location 部分通过 “proxy_pass http://myserver” 实现负载调度功能,其中 proxy_pass 指令用来指定代理的后端服务器地址和端口,地址可以是主机名或者ip地址,也可以是通过 upstream 指令设定的负载均衡组名称。 proxy_next_upstream 用来定义故障转移策略,当后端服务节点返回 500、502、503、504 和执行超时等错误时,自动将请求转发到 upstream 负载均衡组中的另一台服务器,实现故障转移。最后通过 include 指令包含进来一个 proxy.conf 文件。
【其中 /opt/nginx/conf/proxy.conf 的内容为:】
proxy_redirect off;
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_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Nginx的代理功能是通过http proxy模块来实现的。默认在安装Nginx时已经安装了http proxy模块因此可直接使用http proxy模块。下面详细解释proxy.conf文件中每个选项代表的含义。
proxy_set_header:设置由后端的服务器获取用户的主机名或者真实IP地址,以及代理者的真实IP地址。
client_body_buffer_size:用于指定客户端请求主体缓冲区大小,可以理解为先保存到本地再传给用户。
proxy_connect_timeout:表示与后端服务器连接的超时时间,即发起握手等候响应的超时时间。
proxy_send_timeout:表示后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。
proxy_read_timeout:设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的排队之中等候处理的时间。
proxy_buffer_size:设置缓冲区大小, 默认,该缓冲区大小等于指令proxy_buffers设置的大小。
proxy_buffers:设置缓冲区的数量和大小。nginx从代理的后端服务器获取的响应信息,会放置到缓冲区。
proxy_busy_buffers_size:用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_buffers*2。
proxy_temp_file_write_size:指定proxy缓存临时文件的大小。
## 防盗链
配置实例 Nginx的防盗链功能也非常强大。在默认情况下,只需要进行简单的配置,即可实现防盗链处理。请看下面的这个实例:
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked *.ixdba1.net ixdba1.net;
if ($invalid_referer) {
rewrite ^/ http://www.ixdba.net/img/error.gif;
#return 403;
}
}
location /images {
root /opt/nginx/html;
valid_referers none blocked *.ixdba1.net ixdba1.net;
if ($invalid_referer) {
return 403;
}
}
在上面这段防盗链设置中,分别针对不同文件类型和不同的目录进行了设置,读者可以根据自己的需求进行类似的设定。
“jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar”表示对以jpg、gif、png、swf、flv、wma、wmv、asf、mp3、mmf、zip和rar为后缀的文件实行防盗链处理。 “*.ixdba1.net ixdba1.net”表示这个请求可以正常访问上面指定的文件资源。
if{} 中的内容的意思是:如果地址不是上面指定的地址就跳转到通过rewrite指定的地址,也可以直接通过return返回403错误。 要做更加复杂的防盗链处理,可以使用Nginx的HttpAccessKeyModule,通过这个模块可以实现功能更强大的防盗链处理,更详细的参考官方文档。
【日志分割配置实例】
Nginx没有类似Apache的cronolog日志分割处理的功能,但是,可以通过nginxNginx的信号控制功能利用脚本来实现日志的自动切割。请看下面的一个实例。 Nginx对日志进行处理的脚本:
#/bin/bash
savepath_log='/home/nginx/logs'
nglogs='/opt/nginx/logs'
mkdir -p $savepath_log/$(date +%Y)/$(date +%m)
mv $nglogs/access.log $savepath_log/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log
mv $nglogs/error.log $savepath_log/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
将这段脚本保存后加入到Linux的crontab守护进程,让此脚本在每天凌晨0点执行,就可以实现日志的每天分割功能了。 其中,变量savepath_log指定分割后的日志存放的路径,而变量nglogs指定Nginx日志文件的存放路径。最后一行,通过Nginx的信号“USR1”实现了日志的自动切换功能。