标签: nginx

Nginx下使用中文URL和中文目录路径

一、确定你的Linux系统是UTF编码,Root登录SSH:

env|grep LANG
LANG=en_US.UTF-8

二、NGINX配置文件里默认编码设置为utf-8

server
{
listen 80;
server_name .inginx.com ;
index index.html index.htm index.php;
root /usr/local/nginx/html/inginx.com;
charset utf-8;
}

三、如果使用putty
windows –> translation –>UTF-8

mkdir 中文目录名
echo ‘中文目录名’ > 中文目录名/中国.html

四、如果是用securecrt 上传文件,请选择 回话–>外观–UTF-8
如果是FTP软件也将默认编码设置为TUF-8

五、如果上传的文件名出现乱码显示
执行

for f in `ls *.html` ; do mv $f `ls $f|iconv -f GBK -t UTF-8`; done

完毕。

转自http://qiaodahai.com/personal/article/2010/nginx-chinese-url-and-chinese-directory-path.htm

为Nginx开启GZIP

指令

[#gzip gzip]
[#gzip_buffers gzip_buffers]
[#gzip_comp_level gzip_comp_level]
[#gzip_min_length gzip_min_length]
[#gzip_http_version gzip_http_version]
[#gzip_proxied gzip_proxied]
[#gzip_types gzip_types]
gzip

语法: gzip on|off
默认值: gzip off
作用域: http, server, location, if (x) location
开启或者关闭gzip模块

gzip_buffers

语法: gzip_buffers number size
默认值: gzip_buffers 4 4k/8k
作用域: http, server, location

设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_comp_level

语法: gzip_comp_level 1..9
默认值: gzip_comp_level 1
作用域: http, server, location
gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。

gzip_min_length

语法: gzip_min_length length
默认值: gzip_min_length 0
作用域: http, server, location

设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
默认值是0,不管页面多大都压缩。
建议设置成大于1k的字节数,小于1k可能会越压越大。即: gzip_min_length 1024

gzip_http_version

语法: gzip_http_version 1.0|1.1
默认值: gzip_http_version 1.1
作用域: http, server, location
识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。

gzip_proxied

语法: gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] …
默认值: gzip_proxied off
作用域: http, server, location
Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
off – 关闭所有的代理结果数据的压缩
expired – 启用压缩,如果header头中包含 “Expires” 头信息
no-cache – 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
no-store – 启用压缩,如果header头中包含 “Cache-Control:no-store” 头信息
private – 启用压缩,如果header头中包含 “Cache-Control:private” 头信息
no_last_modified – 启用压缩,如果header头中不包含 “Last-Modified” 头信息
no_etag – 启用压缩 ,如果header头中不包含 “ETag” 头信息
auth – 启用压缩 , 如果header头中包含 “Authorization” 头信息
any – 无条件启用压缩

gzip_types

语法: gzip_types mime-type [mime-type …]
默认值: gzip_types text/html
作用域: http, server, location
匹配MIME类型进行压缩,(无论是否指定)”text/html”类型总是会被压缩的。

注意:如果作为http server来使用,主配置文件中要包含文件类型配置文件
http
{
include conf/mime.types;
……
}

如果你希望压缩常规的文件类型,可以写成这个样子
http
{
: include conf/mime.types;

: gzip on;
: gzip_min_length 1000;
: gzip_buffers 4 8k;
: gzip_http_version 1.1;
: gzip_types text/plain application/x-javascript text/css text/html application/xml;

: ……
}

[转]部署nginx反向代理及缓存

#tar xvf prce-8.00.tar.gz

#cd prce-8.00

#./configure

#make && make install

#useradd -s /sbin/nologin www

#cd ../

#tar –xvf ngx_cache_purge-1.2.tar.gz

#tar nginx-0.8.53.tar.gz

#cd nginx-0.8.53

#./configure –user=www –group=www –add-module=../ngx_cache_purge-1.2 –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module

#make && make install

第四,修改并配置nginx

#cd /usr/local/nginx/conf

#vim nginx.conf

#nginx 运行的用户 user nobody;

#开启的进程数

worker_processes 1;

#定义错误日志的路径及其日志级别

error_log /usr/local/nginx/logs/error.log crit;

#nginx 的进程

pid logs/nginx.pid;

#specifiles the value for maximum file descriptors that can be opened by this process

#文件句柄数,和系统单进程打开的文件数相同,不必理会进程个数

worker_rlimit_nofile 65535;

events {

use epoll;

worker_connections 1024; #定义的是单个进程的连接数,该值受系统进程打开文件数限制,需要修改打开的文件句柄数,但是max_client = worker_proxesses X work_connextions,

}

http {

include mime.types;

default_type application/octet-stream;

#日志的格式

log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”request_method $scheme://$host$request_uri $server_protocol” $status $body_bytes_sent’

‘”$http_user_agent” “$http_x_forwarded_for”‘;

# 指定服务器名称哈希的大小,hash bucket size 等于一路处理器缓存大小,与server_names_hash_max_size 共同控制保存服务器名的HASH表

server_names_hash_bucket_size 128;

# 以下两项是设定客户端请求Header头缓存去的大小,4 为个数。128k 为大小。申请4个128k。当http 的uri太长或者request header 过大时会报414 Request URI too large 或者400 bad request

client_header_buffer_size 32k;

large_client_header_buffers 4 128k;

#HTTP请求的BODY 最大限制,若超出此值,报413 Request Entity Too Lager

client_max_body_size 8m;

#缓冲去代理用户请求的最大字节数,可以理解为先保存本地,然后在传给用户

client_body_buffer_size 32k;

#不允许客户端主动关闭连接,如果该项为设置在nginx的日志中可能出现499 错误

proxy_ignore_client_abort on;

#nginx 和后端服务器连接超时时间 发起握手等候响应时间

proxy_connect_timeout 5;

#连接成功后等候后端服务器响应时间,其实已经进入后端的排队等候处理

proxy_read_timeout 60;

#后端服务器数据回传时间,就是在规定的时间内后端服务器必须传完所有的数据

proxy_send_timeout 5;

#代理请求缓存去,该缓存去间保存用户的头信息,以供nginx进行规则处理一般只要保能保存下头信息即可

proxy_buffer_size 32k;

#告诉nginx保存单个用的几个buffer 最大用多少空间

proxy_buffers 4 64k;

#高负载下缓冲大小(proxy_buffers*2)

proxy_busy_buffers_size 128k;,

#设置缓存文件夹大小,如果大于该值,将从upstream 服务器传递请求,而不缓冲到磁盘上

proxy_temp_file_write_size 1024m;

#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=102400 inactive=20s;

#这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid 30s;

#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

#shutdown error display nginx version

# 关闭错误时的nginx 的版本显示

server_tokens off;

#open os function sendfile

# 打开高效的文件传输模式

sendfile on;

#tcp_nopush on;

tcp_nopush on; # 打开linux TCP_CORK,只有sendfile 打开时,该项才有效,用来发送系统HTTP response headers 设置选项的目的是告诉TCP协议不要仅仅为清空发送的缓存而发送报文段。通常三个设置TCPNOPUSH 插口选项。当请求长度超过报文段最大长度时,协议就好可能发出满长度的报文段,这样可以减少报文段的数量,减少的程度取决于每次发送的数量

keepalive_timeout 60;

tcp_nodelay on; #打开TCP_NODELAY 在包含了keepalived 才有效,上面的四项有效的提高了文件传输性能,用sendfile() 函数来转移大量的数据,协议会需要预先解决数据包包头部分,正常情况下包头很小,而且套接字上设置了TCP_NODELAY 。有包头的包将被立即传输,在一些情况下,因为包成功的被对方收到后需要请求对方确认,这样,大量的数据传输就会被延迟而且产生大量不必要的网络流量交换,但是在socket上是指了TCP_CORK ,就像个管道塞住塞子把带有包头的包填满数据,所有的数据根据大小进行填充,自动通过数据包发送出去,但是在数据传送完成是,需要把塞子打开

#开启gzip 的设置

#gzip on;

gzip on;

#设置允许压缩的页面的最小字节数,页面字节数从Header 头中的Content-Length中获取建议设置成大于1k的字节数,小于1k可能越压越大

gzip_min_length 1k;

#设置以16k为单位4倍申请内存做压缩结果缓存,默认值是申请跟原始数据相同大小的内存空间存储gzip压缩结果

gzip_buffers 4 16k;

#默认1.1 ,大部分浏览器支持gzip 压缩

gzip_http_version 1.1;

#设置压缩级别 压缩比率1-9,压缩比率越大,越消耗系统资源

gzip_comp_level 2;

#设置压缩列席

gzip_types text/plain application/x-javascript text/css application/xml;

#设置前端的缓存服务,如squid缓存经过nginx压缩的数据,该选项在做反向代理是设定压缩,后面参数为验证的header头信息,在做相应的压缩处理,

gzip_vary on;

#proxy_cache

# 该处设置的是缓存的目录及其设置的大小

proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

#设置负载池

upstream backend_server {

server 192.168.2.194:80 ;

# 注weight设置的权重 max_fails 设置的是健康监测失败次数,timeout 设置超时时间 当然此处主要是设置nginx的反向代理及其缓存,对于nginx 的负载均衡,在以后的文章中再详细介绍

# server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s;

}

server {

#注:监听的端口号

listen 80;

#server_name localhost;

#设置监听的主机名

server_name freehat.blog.51cto.com;

if ($host !~ ‘freehat.blog.51cto.com’) {

return 403;

}

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

#设置扩展名以gif .jpg .css 等结尾的静态文件缓存

location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$

{

#设置防盗链

valid_referers none blocked freehat.blog.51cto.com;

if ($invalid_referer) {

return 404

#如果后端的服务器返回502 504 执行超时等错误,自动将请求转发到upstream 负责均衡池中的另外一台服务器,实现故障转移

proxy_next_upstream http_502 http_504 error timeout invalid_header;

#进行缓存,使用web缓存去cache_one

proxy_cache cache_one;

#以域名,URI,参数组合成web缓存的Key值,Nginx根据Key值哈希,储存缓存内容到二级缓存目录内

#对不同的HTTP 状态码设置不同的缓存时间

proxy_cache_valid 200 304 12h;

proxy_cache_valid any 1m;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

#设定proxy_set_header Accept-Encoding 或者是后台服务器关闭gzip,该台机器才不会缓存被压缩的文件,造成乱码

proxy_set_header Accept-Encoding “none”;

# proxy_set_header Accept-Encoding “”; 同上面一项相同

#设置proxy_cache 支持后台设定的expires , 即使支持HTTP头信息定义的缓存规则

proxy_ignore_headers “Cache-Control” “Expires”;

if ( !-e $request_filename )

{

proxy_pass http://backend_server;

}注: 该项是如果client 请求的文件在cache 中保存,nginx 直接从cache中把对应的文件返还给client ,不会在去后端的Server 去取对应的文件

expires 1h; 设置过去的时间

}

#set don’t php jsp cgi in cache 设置php jsp cgi 不保存在cache中

location ~.*\.(php|jsp|cgi)?$

{

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://backend_server;

}

#set js and css cache expire time 设置js|css 在浏览器中过期的时间

location ~ .*\.(js|css)

{

expires 1h;

}

#clean all cache 设置清除所有的cache

location ~/purge(/.*)

{

allow 127.0.0.1;

allow 192.168.2.0/24;

deny all;

proxy_cache_purge cache_one $host$1$is_args$args;

}

}

}

第五,启动机及其关闭nginx的命令

1 启动之前检查nginx的主配置文件是否有错误

# /usr/local/nginx/sbin/nginx -t

2 启动nginx的方式

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3 关闭nginx 的方式

# /usr/local/nginx/sbin/nginx -s stop

4 平滑启动nginx

#kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

如何查看Nginx的运行状态:nginx_status

如何查看Nginx的运行状态信息?很简单,只要你在编译安装Nginx时添加了ngx_http_stub_status_module模块(一般都有的),然后
在配置文件里添加如下配置(高亮部分):

server {
listen 80;
server_name xxx;

location /status
{
stub_status on;
access_log off;
error_log off;
}

}
从浏览器中打开:http://www.yourdomain.com/status 可以看到类似以下的内容:
Active connections: 410
server accepts handled requests
30871298 30871298 105864919
Reading: 4 Writing: 8 Waiting: 398
active connections– 对后端发起的活动连接数
server accepts handled requests– nginx 总共处理了 30871298 个连接, 成功创建 30871298 次握手,总共处理了 105864919个请求
reading– nginx 读取到客户端的Header信息数
writing– nginx 返回给客户端的Header信息数
waiting– 开启 keep-alive 的情况下,这个值等于 active – (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
如果reading或writing的值很高,说明正在处理的数据量很大,可能是因为后端的php程序处理慢,拖了后腿,而一般来说,PHP之后以慢,是因为MYSQL,另一个原因很可能就是IO慢,或者客户端的网络慢(这种情况在国内常见些).因为CPU配置低的情况少见.

浅谈Nginx服务器反向代理的一些应用

Nginx作为反向代理的简单应用
对于Nginx的反向代理主要在四个方面:
1、URL重写 URL rewirte
2、反向代理 reverse proxy 并启用缓存功能
3、负载均衡
4、安装第三方模块,实现健康状态检测。

关于一些Nginx的应用,可以在Nginx的官方网站上看到,内容介绍的也相当的详细。这里只浅谈一些我对于Nginx服务器学习到和一些认识。网站地址: http://wiki.nginx.org/Modules

一、URL重写 URL rewirte

要想使Nginx有rewirte功能,要在编译Nginx时要用到–with-http_rewirte_module这个模块,这个功能在编译的时候也是默认打开,如果不想使用这个功能就用–without-http_rewirte_module
这个功能也支持URI重写。

在这个功能中有 if(URL重写在什么的条件下) set rewirte等相关的应用,有兴趣的可到其官方网站到看。
下面来说一下rewirte 和 if 的使用。
1、rewirte
这是个模式匹配如下:
rewrite regex replacement flag
来简单的解释一下这句的意思:rewirte 是关键字,regex是匹配的模式,replacement 是把匹配到的替换成什么,flag是标志位。
例如:将htt://www.zhou123.com/attatch.php?value=111223 改写为http://www.zhou123.com/111223/attatch
就可如下所示的形式:

rewirte ^/(attatch)\.php\?value=(.*)$ /$2/$1 last;

下面来说一下标志位:
last: 当前的内容已经完成了,可以继续以后的语句(如果有多条语句时)
break: (当重写的语句执行完成后就直接跳出去支行后面的语句)
redirect: 重定向到一个完整的URL中去如:http://。用302来表示,这个是临时性的。
permanent: 永久重定向 用301表示;
下面来举个小例子:
如用户访问:www.zhou123.com/forum/ 重写为www.zhou123.com/bbs/

rwirte ^/forum/?$ /bbs/ permanent;

编辑nginx的配置文件来测试一下:
vim /etc/nginx/nginx.conf
定位到 server 这行在这个server加入如上内容即可:

location / {
root html;
rwirte ^/forum/?$ /bbs/ permanent; #####这行是新加的内容。
index index.html;
}

在浏览器中输入:http://www..zhou123.com/forum/就会把地址改成www.zhou123.com/bbs/。
rewirte比较简单这里就不测试了。

2、 关于if的应用

语法: if (condition) {…}
应用环境;server,location
条件:
1、变量名: false values are:empty string (“”,or any string starting with “0”;)
2、对于变量进行的比较表达式,可使用=或!= 进行测试 ;
3、正则表达式的模式匹配:
~ 区分大小的模式匹配
~* 不区分字母的大小写的模式匹配
!~ 和!~* 分别对上面的两种测试取反
4、测试文件是否存在-f 或!-f
5、测试目录是否存在-d或!-d
6、测试目录、文件或链接文件的存在性-e或!-e
7、检查一个文件的执行权限-x或!-x
在正则表达式中,可以使用圆括号标记匹配到的字符串,并分别可以使用$1、$2….

3、实现域名跳转:
要在配置文件中修改成如下所示的内容:
server
{
listen 80;
server_name jump.magedu.com;
index index.html index.php;
root /www/htdocs;
rewrite ^/ http://www.magedu.com/;
}
这样就可以把jump.magedu.com 改成http://www.magedu.com/这个域名了。
4、实现域名镜像
server
{
listen 80;
server_name mirror.magedu.com;
index index.html index.php;
root /www/htdocs;
rewrite ^/(.*)$ http://www.magedu.com/$1 last;
}
对于Nginx的URL重写就简单的介绍到这。

二、下面来谈谈Nginx的反向代理功能:

1、proxy
这个模块在Nginx编译时也是默认开启的。
用法:proxy_pass URL地址。
就说通过Nginx要反向代理到什么地方去,后面的URL就是要代理的后台服务器的地址 。
下面用一个事例来说明一下:
在Nginx服务器的ip为:192.168.35.1/24
后台的服务器ip是: 172.16.35.3/16 安装了apachen服务器,提供网页。
在nginx的配置文件中只要加入如下所示的内容即可:
location / {
#root html;
#index index.html;
proxy_pass http://172.16.35.3; ## 添加这条内容即可。
}

在后台的apache服务器的网页内容:
# echo “172.16.35.3” > /var/www/html/index.html
在浏览器中输入:http://192.168.35.1就会如下图所示的结果:

此时的Nginx的反向代理并没有什么实际的意义,只是在用户和服务器之间多加了一台服务器而已。要为Nginx添加缓存功能此时才能把Nginx的优势发挥出来。

2、为反向代理启用缓存功能:
在配置文件中加入如下所示的内容:

http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
server {
location / {
proxy_pass http://172.16.35.3;
proxy_set_header Host $host;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
下面要实现的环境与上面所提到的例子的环境一样。
在Nginx服务器的ip为:192.168.35.1/24
后台的服务器ip是: 172.16.35.3/16 apache服务
添加完成后来进行一下压力测试:
在另外的一台服务器上用命令:
ab -c 100 -n 10000 http://192.168.35.1/index.html ###通过nginx服务器来访问apache服务器。
在结果中找到如下一行:
Requests per second: 7354.40 [#/sec] (mean) ####### 7354表示每秒接受请求的个数

ab -c 100 -n 10000 http://172.16.35.3/index.html ###来访问apache服务器。
同样在结果中找到如下一行:
Requests per second: 1489.96 [#/sec] (mean)
从两个结果就可以清晰的看到Nginx的反向代理加上缓存功能是多么的强大。几乎是apache服务器的10倍。

三、反向代理多台服务器实现负载均衡:

再添加一台后台的服务器:ip:172.16.35.2/16 也提供apache服务器。
这时的实验环境是:三台虚拟机了

nginx:192.168.35.1/24
两台apache服务器ip分别为:
172.16.35.2/16
172.16.35.3/16
要保证三台服务器之间的网络能正常通信哟!!!

新加入的服务器网页内容为:“172.16.35.2”
# echo “

172.16.35.2

” > /var/www/html/index.html

在nginx的配置文件中加入如下所示的内容:

http {

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
upstream myload {
server 172.16.35.2;
server 172.16.35.3 weight=2;
#################### 定义这两个后台服务器并加上了权重。
}

server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myload; #### 这个名称一定要与前面定义的相同。
}

在浏览器中输入:http://192.168.35.1如图所示的结果:

经过刷新网页的内容在如此图所示的结果来回切换。这是为了显示结果所以为两个服务器设置了不同的网页。

四、安装配置第三方模块,实现upstream中对后端http

server的健康状态检测:
说明:这需要为nginx打补丁才能应用,所要重新源码编译nginx。

模块下载地址:https://github.com/cep21/healthcheck_nginx_upstreams;模块名称:ngx_http_healthcheck_module

安装配置方法:
1、首先解压healcheck模块到某路径下,这里假设为/tmp/healthcheck_nginx_upstreams

2、对nginx打补丁

首先解压nginx,并进入nginx源码目录:
# tar xf nginx-1.0.11.tar.gz
# cd nginx-1.0.11
# patch -p1 < /tmp/healthcheck_nginx_upstreams/nginx.patch 而后编译nginx,在执行configure时添加类似下面的选项: --add-module=/tmp/healthcheck_nginx_upstreams 所以,这里就使用如下命令: # ./configure \ --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --with-pcre \ --add-module=/tmp/healthcheck_nginx_upstreams # make && make install ngx_http_healthcheck_module模块的使用方法: 1、此模块支持的指令有: healthcheck_enabled 启用此模块 healthcheck_delay 对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000; healthcheck_timeout 进行一次健康检测的超时时间,单位为毫秒,默认值2000; healthcheck_failcount 对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器; healthcheck_send 为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send "GET /health HTTP/1.0" 'Host: www.zhou123.com'; healthcheck_expected 期望从后端服务器收到的响应内容;如果未设置,则表示从后端服务器收到200状态码即为正确; healthcheck_buffer 健康状态检查所使用的buffer空间大小; healthcheck_status 通过类似stub_status的方式输出检测信息,使用方法如下: location /stat { healthcheck_status; } 一个例子: 在配置文件中写上如下内容: http { ... ... proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; upstream myload { server 172.16.35.2; server 172.16.35.3 weight=2; healthcheck_enabled; healthcheck_delay 1000; healthcheck_timeout 1000; healthcheck_failcount 2; healthcheck_send "GET /.health.html HTTP/1.0"; ## 这个是检测网页,这个网页的内容不作要求。只要这个网页存在即可。 } server { listen 80; server_name localhost; location / { proxy_pass http://myload; } location /stat { healthcheck_status; } ##############这个可以查看状态; 在浏览器中输入:http://192.168.35.1/stat 下图是测试的结果:

上图是两个服务器都正常的情况的结果。

当有一个服务器挂了就会显示如下的结果:

OK! 这些关于Nginx服务器反向代理的应用,就先说到这吧。
有想了解的更多的最好在nginx的官方网站阅读nginx的文档。其文档是相当的详细,唯一缺点就这个是用英语写的,看的好不辛苦啊!英语不好,也是个大问题啊!要努力学习这个又爱又恨的英语。

本文出自 “linux学习” 博客,请务必保留此出处http://zhou123.blog.51cto.com/4355617/840837

如何卸载lnmp

killall nginx *//终止nginx进程
/etc/init.d/mysql stop *//关闭mysql
killall mysqld *//终止mysql进程
/usr/local/php/sbin/php-fpm stop *//关闭php
killall php-cgi *//终止php-cgi进程
rm -rf /usr/local/php *//删除php文件
rm -rf /usr/local/nginx *//删除nginx文件
rm -rf /usr/local/mysql *//删除mysql文件
rm -rf /usr/local/zend *//删除zend文件
rm /etc/my.cnf *//删除配置文件
rm /etc/init.d/mysql *//删除mysql文件
rm /root/vhost.sh *//删除配置虚拟主机脚本
rm /root/lnmp *//删除lnmp文件夹

用nginx反向代理解决VMware虚拟机在NAT模式下的80端口访问问题

相信很多朋友已经遇到了这个问题,但是都没有什么好的解决方案。首先思路上觉得是只有一个公网IP,必须要有一个支持应用层的程序来进行转发,进行代理才能够顺利的把相应的请求发到相应的后端机器上,结果自然选择nginx来进行反向代理了。

环境:
宿主机是Windows2003,IP为10.1.1.3,装VMware Workstation 8(生产环境可以装VMware service 2.0.2或者VMware Esx 5来试一下)。在windows2003上运行nginx的win版。VM开两台虚拟机,网络模式为NAT模式。一台IP为192.168.84.128,一个台为192.168.84.129。分别开启80端口进行web服务。
修改测试机的hosts文件,指定www.001.com和www.002.com到宿主机10.1.1.3。

目的:
通过对宿主机win2003上的nginx设置,使解析到宿主机IP上的域名能够正常访问后面的web服务。适用于只有一个公网IP需要部署多个虚拟机来提供80端口web服务,一个虚拟机一个IP对应一个域名。

方法:
1、在nginx.conf最后一个”}”前,加入“include proxy.conf;”。

2、在同目录下,建立”proxy.conf”文件,内容如下:
server {
listen 80;
server_name www.001.com;
location / {
proxy_pass http://192.168.84.129; //后端ip地址
proxy_redirect off; //关闭后端返回的header修改
proxy_set_header Host $host; //修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; //设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
listen 80;
server_name www.002.com;
location / {
proxy_pass http://192.168.84.128; //后端ip地址
proxy_redirect off; //关闭后端返回的header修改
proxy_set_header Host $host; //修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; //设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

此番配置之后,已经可以用任何解析到宿主机的IP的域名,访问自己的站点了。

可能遇到的问题:
后面的各种程序无法获得真实的访客IP,查了一下,可能是程序写的不完善造成的,具体看下面的测试IP用例,如果哪个方法可以获得正确的IP,可以替换源程序的相应函数。

测试IP用例(PHP):

";
echo $_SERVER["HTTP_X_FORWARDED_FOR"];
echo "
"; echo $_SERVER["HTTP_CLIENT_IP"]; echo "
"; echo $_SERVER["REMOTE_ADDR"]; echo "
"; echo getenv("HTTP_X_FORWARDED_FOR"); echo "
"; echo getenv("HTTP_CLIENT_IP"); echo "
"; echo getenv("REMOTE_ADDR"); ?>

有一个问题是,无法远程来管理代理的主机,因为他们没有公网的IP,目前还不知道能否也用nginx来代理相应端口,有待实验。但是如果你是在内部来管理服务器的话,这样子正好提高了安全性,外面的人无法直接访问到后面的虚拟机。

没有在VMware Esx的环境下试验,不知道能否成功,感觉思路是一样的,有空再试试咯。