您的位置:首页 > 运维架构 > Nginx

nginx 配置详解

2014-03-02 02:06 218 查看
内容比较多,但是整理的很齐全。错误之处请留言指出。

#cat /etc/nginx/nginx.conf

#运行用户

user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;

#全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

#工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;

#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

#开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}

server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问
server_name www.xx.com;

#设定本虚拟主机的访问日志
access_log logs/www.xx.com.access.log main;

#默认请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称

fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 脚本文件请求的路径
include /etc/nginx/fastcgi_params;
}

# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}

}
}

以上是一些基本的配置,使用Nginx最大的好处就是负载均衡

如果要使用负载均衡的话,可以修改配置http节点如下:

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;

#省略上文有的一些配置节点

#。。。。。。。。。。

#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}

upstream mysvr2 {
#weigth参数表示权值,权值越高被分配到的几率越大

server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}

#第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen 80;
server_name 192.168.8.x;

#对aspx后缀的进行负载均衡请求
location ~ .*\.aspx$ {

root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称

proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表

#以下是一些反向代理的配置可删除.

proxy_redirect off;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
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服务器传

}

}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

location [=|~|~*|^~|@] /uri/ {···}
解释:
[ = ] 精确匹配,如果找到,立即停止搜索,并立即处理请求(优先级最高)
[ ~ ] 区分大小写
[ ^~ ] 之匹配字符串,不匹配正则表达式
[ ~*] 不区分大小写
[ @ ] 指定一个命名的location,一般只用于内部重定向请求
匹配过程
首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果,如果字符串和正则都匹配,那么正则优先级较高。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Nginx支持下表中的信号:

信号名 作用描述

TERM, INT 快速关闭程序,中止当前正在处理的请求

QUIT 处理完当前请求后,关闭程序

HUP 重新加载配置,并开启新的工作进程,关闭旧的进程,此操作不会中断请求

USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件

USR2 平滑升级可执行程序

WINCH 从容关闭工作进程

examples:
运行 killall –s HUP nginx 来让 Nginx 重新加载配置

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

nginx 基于主机头的多网站运行
vim /etc/nginx/conf.d/virtual.conf
server {
listen 80;
server_name www.abc.com;

location / {
root html/abc;
index index.html index.htm index.php;

}
}

server {
listen 80;
server_name www.cbd.com;

location / {
root html/cbd;
index index.html index.htm;
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

nginx 代理与反向代理

server {
listen 80;
server_name www.abc.com;
location / {
proxy_pass http://192.168.18.250;
}
}

server {
listen 80;
server_name www.abc.com;
location ~ \.php$ {
proxy_pass http://192.168.18.250;
}
}

数据包走向 client-->nginx---->server nginx收到客户端的请求会替代客户端去找服务器下载到nginx,然后nginx在把数据交给客户端。客户端到服务器的数据包必须经过nginx

Proxy参数

client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
参数解释:
#允许客户端请求的最大的单个文件字节数
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;
#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers 4 32k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

URL重定向
server {
listen 80;
server_name www.abc.com;
location / {
rewrite ^/ http://192.168.18.250;
}
}

数据包走向 client-->nginx nginx告诉客户端让服务器的新地址(真实服务器),客户端收到后再去找服务器 client--->server

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LNMP

LNMP
L linux
N nginx
M mysql
P php

fastcgi spawn-fcgi-1.6.3-1.el5.i386.rpm
opcode加速 php-eaccelerator-0.9.5.2-2.el5.i386.rpm

备注:nginx只能处理静态页面, php我们使用fastcgi来处理

yum install php php-mysql php-pdo php-cli mysql mysql-server
[root@server1 nginx-rpm]# yum install *.rpm --nogpgcheck -y

cp php_cgi /etc/init.d/
chmod +x /etc/init.d/php_cgi

备注:和以前处理php的不同,以前apache+libphp5.so模块不需要单独启动php的服务,现在使用fastcgi处理php需要单独启动服务,服务就是php_cgi这个脚步来控lib制!

vim /etc/nginx/nginx.conf

location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;

###打开#注释,修改为SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;

启动相关服务
[root@server1 nginx-rpm]# /etc/init.d/nginx start

注意:apache 和nginx 都使用 80端口,默认只能开一个服务!

nginx的DocumentRoot /usr/share/nginx/html

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

upstream module

nginx的upstream目前支持4种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

2、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

4、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

负载均衡:

只需要在http中增加

upstream tgcluster {#定义负载均衡设备的Ip及设备状态

ip_hash;

server 127.0.0.1:9090 down;

server 127.0.0.1:8080 weight=2;

server 127.0.0.1:6060;

server 127.0.0.1:7070 backup;

}

在需要使用负载均衡的server中增加

proxy_pass http://tgcluster/;
每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载

2.weight 默认为1.weight越大,负载的权重就越大。

3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

4.fail_timeout:max_fails次失败后,暂停的时间。

5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

代理

可以让虚拟机基于不同端口来做网站,在虚拟主机配置文件做好后,只需在主配文件中定义location就可以,可以按照请求的不同分别将请求送到不同的虚拟主机。这样的虚拟主机只能基于用户访问的不同来定义。也可以直接按主机头来定义。

只需要在nginx的配置文件中增加虚拟主机,然后加入

proxy_pass http://localhost:8000;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

nginx 分发器设置
默认采用RR算法,如果想采用其他算法,如ip_hash类似于LVS sh,例子

upstream apache {
ip_hash;
server 192.168.18.187;
server 192.168.18.116;
}

server {
listen 80;
server_name www.abc.com;
location / {
proxy_pass http://apache; }
}

ip_hash算法能够保证来自同样源地址的请求,都分发到同一台主机

url_hash http://ip/a.html 需要自己重新编译nginx

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基于http协议主机头的分发

http {
upstream tomcat {
server 192.168.18.254:8080;
}

server {
listen 80;
server_name www.tomcat.com;
location / {
proxy_pass http://tomcat; #root /tmp/xiaoxuebiye/;
}
}


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基于权重

upstream apache {
server 192.168.18.187 weight=1;
server 192.168.18.116 weight=2;
}
server {
listen 80;
server_name www.tomcat.com;
location / {
proxy_pass http://apache; }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RS故障检测

upstream apache {
server 192.168.18.187 weight=1 fail_timeout=1s;
server 192.168.18.116 weight=2 fail_timeout=1s;
}
server {
listen 80;
server_name www.tomcat.com;
location / {
proxy_pass http://apache; }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

限速设置(本案例是针对虚拟主机)
limit_zone one $binary_remote_addr 10M; 总带宽10M
server {
listen 80;
server_name www.domain.com;
location / {
root /tmp/186;
index index.html;

limit_rate 10k; 下载速度
# limit_rate_after 3m;
limit_conn one 1; 允许一个IP同时链接多少次
}

2.limit_rate

是指定向客户端传输数据的速度,单位是每秒传输的字节数

该限制只针对一个连接的设定,如果同时两个连接数,那么速度是设置值的两倍

3.limit_rate_after

当一个客户端连接后,将以最快的速度下载多大文件,然后在以限制速度下载文件

该指令是下载字节量的大小值,而不是时间值
当一个客户端连接后,将以最快的速度下载3M,然后再以大约10k的速度下载

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基于语言的分发
要求各位完成php,jsp分发的基础上实现负载均衡

http {

upstream apachephp {
server 192.168.18.187;
}

upstream apachejsp {
server 192.168.18.188;
}

server {
location ~* \.php$ {
proxy_pass http://apachephp; }
}

location ~* \.jsp$ {
proxy_pass http://apachejsp; }

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基于浏览器分发

server {
listen 80;
server_name www.domain.com;
location / {
root /tmp/186;
index index.html;
location / {
proxy_pass http://192.168.18.241;
if ( $http_user_agent ~* Elinks ) {
proxy_pass http://192.168.18.245; }

if ( $http_user_agent ~* Mozilla ) {
proxy_pass http://192.168.18.246; }
}
}

思考如果其他浏览器呢? 去访问/tmp/186文件夹下的网站。 elinks浏览器去访问245 firefox访问246

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基于源地址分发(类似于ACL DNS)
编译
./configure --with-http_geoip_module

upstream bj.server {
server 192.168.18.245;
}
upstream sh.server {
server 192.168.18.244;
}

upstream default.server {
server 192.168.18.242;
}

geo $geo {
default default;
192.168.18.241/32 bj;
192.168.18.242/32 sh;
}

location / {
proxy_pass http://$geo.server$request_uri;
}

241---access result is 245
242---access result is 244
其他机器访问到时242页面

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1首先要排除 daolian.jpg
location ~ daolian\.jpg${
}

2.如果不是你的网站链过来的,就显示daolian.jpg这个图片
location ~* .(gif|jpg|png|swf|flv)$ {
root /tmp/4;
valid_referers none blocked www.domain.com *.domain.com;
if ($invalid_referer) {
#rewrite ^/ http://www.domain.com/daolian.jpg; return 403;
}
}

server {
listen 80;
server_name www.domain.com;
location / {
root /tmp/186;
index index.html;
}

location ~ daolian.jpg {
root /tmp/186;
}
location ~* .(gif|jpg|png|swf|flv)$ {
root /tmp/186;
valid_referers none blocked www.domain.com *.domain.com;
if ($invalid_referer) {
rewrite ^/ http://www.domain.com/daolian.jpg; }
}
}

一,针对后缀实行防盗链
location ~* \.(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ {
valid_referers none blocled *.mynginx.com;
if ($invalid_referer) {
rewrite ^/ http://www.mynginx.com/daolian.gif; #return 403;
}

}

二,针对图片目录实行防盗链
location /images/ {
alias /data/images/;
valid_referers none blocked *.mynginx.com;
if ($invalid_referer) {
rewrite ^/ http://www.mynginx.com/daolian.gif; #return 403;
}
}

需要注意的是,这二段防盗链的配置要放在正确的server里,也就是要放在图片url所在的server_name里。其次
rewrite也要写正确,否则可能造成重复rewrite,可以用firefox的插件Firebug来查看。如果不想重写到某个url,
可以直接返回403。

附上有关Referer的解释:

当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。
这个头可以随意的伪造,因此,使用这个模块并不能100%的阻止这些请求,绝大多数拒绝的请求来自一些典型的浏览器,
可以认为这些典型的浏览器并不能提供一个”Referer”头,甚至是那些正确的请求。

指令:valid_referers

语法:valid_referers [none|blocked|server_names] …
默认值:none
使用字段:server, location
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1(

参照前例)。
参数可以使如下形式:

none意为不存在的Referer头
blocked意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

做过测试的。 referers 去看抓包文件http html 文件时a.html

location ~* \.(png|jpg|gif)$ {
valid_referers none 192.168.18.241;
if ($invalid_referer) {
return 403;
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

keepalived+nginx
注意:keepalived是来控制nginx服务器虚拟IP的。他不能管理分发,分发只能由nginx来做,所以keepalived只负责管理虚IP,不用在keepaliced配置文件中定义RS服务器,只需要定义VIP。
nginx服务器通过upstream模块来定义分发。

主服务器设置
安装nginx
安装keepalived

编辑keepalived主配文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
router_id LVS_DEVEL
}

vrrp_script check_nginx {
script sh /etc/keepalived/nginx_pid.sh
interval 2
fail 1
}

vrrp_instance nginx {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.18.250
}

track_script {
check_nginx
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

设置nginx监控脚本,如果发现nginx服务宕机,立刻重新启动;如果启动不了就关闭keepalived服务,让辅助的接手分发工作。
vim /etc/keepalived/nginx_pid.sh

#!/bin/bash
while :
do
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then
/etc/init.d/nginx restart
sleep 5
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
sleep 5
done

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

后台启动监控脚本
注意使用方法
& 和 nohup...&

root用户如果使用&则root退出后则后台程序退出。如果使用nohup..&就不会退出,nohup就是永远不退出的意思(no hand up 永远不挂)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

启动
service nginx restart
service keepalived restart
nohup sh /etc/keepalived/nginx_pid.sh &

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

备份keepalived主机设置

安装nginx,keepalived

编辑配置文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Configuration File for keepalived

global_defs {
router_id LVS_DEVEL
}

vrrp_script check_nginx {
script sh /etc/keepalived/nginx_pid.sh
interval 2
fail 1
}

vrrp_instance nginx {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.18.250
}

track_script {
check_nginx
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

设置nginx监控脚本 nginx_pid.sh 同上

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

启动
service nginx restart
service keepalived restart
nohup sh /etc/keepalived/nginx_pid.sh &

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

test keepalived
在主keepalived上关闭nginx
在主从keepalived服务器上滚动日志,查看是否切换
service nginx stop(一个劲重复执行,保证其关闭2秒以上。【interval 2 主从之间检测时间为2S】 ),
或则直接关闭keepalived

(主keepalived)
tailf /var/log/mess
Apr 6 03:28:47 rhel5 Keepalived: Terminating on signal
Apr 6 03:28:47 rhel5 Keepalived: Stopping Keepalived v1.1.17 (04/06,2013)
Apr 6 03:28:47 rhel5 Keepalived_vrrp: Terminating VRRP child process on signal
Apr 6 03:28:47 rhel5 Keepalived_healthcheckers: Terminating Healthchecker child process on signal
Apr 6 03:28:47 rhel5 Keepalived_vrrp: VRRP_Instance(nginx) removing protocol VIPs.
Apr 6 03:28:47 rhel5 avahi-daemon[3313]: Withdrawing address record for 192.168.18.250 on eth0.
Apr 6 03:43:04 rhel5 smartd[3345]: Device: /dev/sdb, No such device, open() failed

tailf /var/message (辅助keepalived)
Apr 5 15:28:48 server Keepalived_vrrp: VRRP_Instance(nginx) Transition to MASTER STATE
Apr 5 15:28:49 server Keepalived_vrrp: VRRP_Instance(nginx) Entering MASTER STATE
Apr 5 15:28:49 server Keepalived_vrrp: VRRP_Instance(nginx) setting protocol VIPs.
Apr 5 15:28:49 server Keepalived_vrrp: VRRP_Instance(nginx) Sending gratuitous ARPs on eth0 for 192.168.18.250
Apr 5 15:28:49 server Keepalived_vrrp: Netlink reflector reports IP 192.168.18.250 added
Apr 5 15:28:49 server Keepalived_healthcheckers: Netlink reflector reports IP 192.168.18.250 added
Apr 5 15:28:49 server avahi-daemon[3256]: Registering new address record for 192.168.18.250 on eth0.
Apr 5 15:28:54 server Keepalived_vrrp: VRRP_Instance(nginx) Sending gratuitous ARPs on eth0 for 192.168.18.250
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

注意:可加可不加,看下图片keepalived.png确定加到什么地方

mcast_src_ip 192.168.9.155 <==辅nginx的IP地址
mcast_src_ip 192.168.9.154 <==主nginx的IP的地址
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

该架构的缺点是keepalived也需要监控,一旦keepalived宕机了,或则服务意外宕了,那么虽然备份(辅助)keepalived可以接手工作,但是管理员不知道,所以nagios一定要监控好keepalived服务,一旦有问题立马解决,当解决问题后,启动keepalived后自然辅助就交出分发权限了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

nginx主配文件 apache组,

sed -i '/#/d' nginx.conf 删除带#的行 sed -i '/^#/d' nginx.conf
#####定义分发
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

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 /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
upstream apache {
server 192.168.18.244 fail_timeout=1s;
server 192.168.18.245 fail_timeout=1s;
}
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name _;
location / {
proxy_pass http://apache; }
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

日志截断
mv access.log access.log.0
killall -s USR1 nginx
sleep 1
gzip access.log.0

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

注意做这个实验的时候要求
1.本网段中只能讲课的机器开启keepalived 如果学生也开启就会造成组播泛滥,特别是学生和你使用一样密码。
2.要求主副keepalived配置相同时间

另外如果使用脚本健康检查nginx keepalived配置文件中可以不加
vrrp_script check_nginx {
script sh /etc/keepalived/nginx_pid.sh
interval 2
fail 1
}

track_script {
check_nginx
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ngx_pagespeed
ngx_pagespeed 是一个 Nginx 的扩展模块,可以加速你的网站,减少页面加载时间,它会自动将一些提升web性能的实践应用到网页和相关的资源(CSS、JS和图片)上,无需你修改内容和流程。
ngx_pagespeed 提供的功能包括:
1、图像优化:剥离元数据、动态调整,重新压缩
2、CSS 和 JavaScript 压缩、级联、内联
3、小资源内联
4、延迟图像和 JavaScript 加载
5、HTML 重写
6、缓存周期延长

reference https://github.com/pagespeed/ngx_pagespeed
How to use

In your nginx.conf, add to the main or server block:

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache; # Use tmpfs for best results.
In every server block where pagespeed is enabled add:

# Ensure requests for pagespeed optimized resources go to the pagespeed
# handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }

<-------------END-------------->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: