/ 中存储网

Nginx參考文档

2014-04-03 16:54:01 来源:IT技术网
Nginx參考

Nginx 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Nginx 安装、调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Nginx 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1. 安装前注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2. 安装前资源的准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3. 安装 Nginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4. 验证安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5. Nginx 的常用参数和控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

6. 编写管理 Nginx 的脚步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

7. 使用注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Nginx 配置文件详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Nginx 中的全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

通过例子学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Nginx 监控 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Nginx Rewrite 基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Rewrite 基本标记 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Rewrite 正则表达式匹配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Rewrite 条件判断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Rewrite 应用实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

伪地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

域名跳转 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

附录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Nginx 编译模块名称解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

 Nginx 简介

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器 ,Nginx ,它的发音为

“ engine X ” , 是一个高性能的 HTTP 和反向代理服务器,同时也是一个

IMAP/POP3/SMTP 代理服务器. Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问

量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor

Sysoev 在建立的项目时 , 使用基于 BSD 许可。

据说他当初是 F5 的成员之一,英文主页: http://nginx.net 。

俄罗斯的一些大网站已经使用它超过两年多了 , 一直表现不凡 , 相信想了解

nginx 的朋友都读过阿叶大哥的利用 nginx 实现负载均衡 . 直到 2007 年 4 月, 俄

罗 斯大约有 20% 左右的虚拟主机是由 nignx 服务或代理的。 Google 在线安全博

客中统计 nginx 服务或代理了大约所有 Internet 虚拟主机的 4% 。而 netcraft

的统计显示, nginx 服务的主机在过去的一年里以四倍的速度增长短短的几年

里, 它的排名已跃进第 9 。

( 参见: http://survey.netcraft.com/Reports/200707/ )

Nginx 以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常 高

效的反向代理、负载平衡。其拥有匹配 Lighttpd 的性能,同时还没有 Lighttp d

的内存泄漏问题,而且 Lighttpd 的 mod_proxy 也有一些问题并且很久没有更新 。

Nginx 并不支持 cgi 方式运行,原因是可以减少因此带来的一些程序上的 漏

洞。那么我们必须使用 FastCGI 方式来执行 PHP 程序。

现在, Igor 将源代码以类 BSD 许可证的形式发布。 Nginx 因为它的稳定性、

丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是

Apache2.2 + mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面 的

速度非常快,而且它的模块数量达到 Apache 的近 2/3 。对 proxy 和 rewrite 模

块的支持很彻底,还支持 mod_fcgi 、 ssl 、 vhosts ,适合用来做 mongrel clus ters

的前端 HTTP 响应。

N ginx 做为 HTTP 服务器,有以下几项基本特性:

1. 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲 。

2. 无缓存的反向代理加速,简单的负载均衡和容错 。

3. FastCGI , 简单的负载均衡和容错 。

4. 模块化的结构。包括 gzipping, byte ranges, chunked responses 以及

SSI-filter 等 filter 。如果由 FastCGI 或其它代理服务器处理单页中 存

在的多个 SSI , 则这项处理可以并行运行,而不需要相互等待。

5. 支持 SSL 和 TLSSNI . 。 Nginx 专为性能优化而开发,性能是其最重要的考量 , 实现上非常注重效率 。

它支持内核 Poll 模型,能经受高负载的考验 , 有报告表明能支持高达 50,000 个

并发连接数。

Nginx 具有很高的稳定性。其它 HTTP 服务器,当遇到访问的峰值,或者有

人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去 响

应,只能重启服务器。例如当前 apache 一旦上到 200 个以上进程, web 响应速 度

就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内 存

占用率非常低。 nginx 官方表示保持 10,000 个没有活动的连接,它只占 2.5M 内 存 ,

所以类似 DOS 这样的攻击对 nginx 来说基本上是毫无用处的。就稳定性而

言 ,nginx 比 lighthttpd 更胜一筹。

Nginx 支持热部署。它的启动特别容易 , 并且几乎可以做到 7*24 不间断运

行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对 软

件版本进行进行升级。

Nginx 采用 master-slave 模型 , 能够充分利用 SMP 的优势,且能够减少工 作

进程在磁盘 I/O 的阻塞延迟。当采用 select()/poll() 调用时,还可以限制每 个

进程的连接数。

Nginx 代码质量非常高,代码很规范,手法成熟,模块扩展也很容易。特 别

值得一提的是强大的 Upstream 与 Filter 链。 Upstream 为诸如 reverse proxy ,

与其他服务器通信模块的编写奠定了很好的基础。而 Filter 链最酷的部分就是

各个 filter 不必等待前一个 filter 执行完毕。它可以把前一个 filter 的输出

做为当前 filter 的输入,这有点像 Unix 的管线。这意味着,一个模块可以开 始

压缩从后端服务器发送过来的请求,且可以在模块接收完后端服务器的整个请 求

之前把压缩流转向客户端。

Nginx 采用了一些 OS 提供的最新特性如对 sendfile (Linux2.2+) , accept -

filter (FreeBSD4.1+) , TCP_DEFER_ACCEPT (Linux 2.4+) 的支持,从而大大提

高了性能。

当然, nginx 还很年轻,多多少少存在一些问题,比如: Nginx 是俄罗斯人

创建,目前文档方面还不是很完善.因为文档大多是俄语,所以文档方面这也 是

个障碍.尽管 nignx 的模块比较多,但它们还不够完善。对脚本的支持力度不 够 。

这些问题, nginx 的作者和社区都在努力解决,我们有理由相信 nginx 将 继

续以高速的增长率来分享轻量级 HTTP 服务器市场,会有一个更美好的未来。

Nginx 安装、调试

Nginx 安装

1. 1. 1. 1. 安装前注意事项

1 ) 目前官方 Nginx 并不支持 Windows ,您只能在包括 Linux 、 UNIX 、 BS D

系统下安装和使用;

2 ) Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样

通过安装各种模块来支持不同的页面脚本,例如 PHP 、 CGI 等。

3 )为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前 需

要确定系统是否安装有 PCRE ( Perl Compatible Regular Expressions )包 。

4) 需要安装在 2.6 以上内核版本的 GNU/Linux 系统中。

5) 编译前,请先确认 gcc 、 make 、 patch 等编译工具是否已安装,并可正常

使用。

2. 2. 2. 2. 安装前资源的准备

主要软件清单列表:

1 ) Nginx 安装文件

Nginx 0.6.32 nginx-0.6.32.tar.gz

( Nginx 官方站点为 http://www.nginx.net ,国内较好的中文站点为 http://www.nginx.cn )

2 ) Nginx URL 哈希模块

Upstream Hash Module nginx_upstream_hash-0.3.tar.gz

3 )正则表达式模块

PCRE 7.7 pcre-7.7.tar.gz

( 到 http://www.pcre.org 下载 PCRE 库的最新稳定版本 )

3. 3. 3. 3. 安装 Nginx (本安装环境是在 Rethad5 上,所有的安装文件和其他软件都在 /usr/local/src 上)

#cd /usr/local/src

#gunzip nginx-0.6.32.tar.gz

#gunzip nginx_upstream_hash-0.3.tar.gz

#gunzip pcre-7.7.tar.gz

#tar -xvf nginx-0.6.32.tar

#tar -xvf nginx_upstream_hash-0.3.tar

#tar -xvf pcre-7.7.tar

#cd nginx-0.6.32 (随后 patch 的运行必须要在该目录下)

#patch -p0 < /usr/local/src/nginx_upstream_hash-0.3/nginx.patch

4. 4. 4. 4. 验证安装

安装成功后 /usr/local/nginx 目录下有四个子目录分别是: conf 、 html 、 log s 、

sbin 。其中 Nginx 的配置文件存放于 conf/nginx.Conf ; Nginx 只有一个程

序文件位于 sbin 目录下的 nginx 文件。 如果你使用默认的配置文件,则要 确

保系统的 8 0 端口没被其他程序占用, 然后 运行 /usr/local/nginx/sbin/nginx 命 令

来启动 Nginx 。

可以通过以下两种方法测试 Nginx 是否成功启动

1. 打开浏览器访问此机器的 http:// IP : 端口( 80 可免输入) ,如果浏览器 出

现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

2. 输入命令 netstat -nlp 如果能找到 Nginx 的端口那也代表你的 Nginx 成

功启动了。我的输出结果是:

tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 10209/nginx

5. 5. 5. 5. Nginx 的常用参数和控制

Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用 参

数和系统信号机制对 Nginx 进程本身进行控制的。

程序运行参数

-c <path_to_config> :使用指定的配置文件而不是 conf 目录下的 nginx.conf 。

-t :测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常 重

要,用来检测所修改的配置文件是否有语法错误。

-v :显示 nginx 版本号。

-V :显示 nginx 的版本号以及编译环境信息以及编译时的参数。

如果 要测试某个配置文件是否书写正确,可以使用以下命令

/usr/local/nginx/ sbin/nginx – t – c conf/nginx _my .conf

通过信号量对 Nginx 进行控制

有一个奇怪的现象不知道大家有没有注意到,就是你会发现只有启动 Nginx

#./configure --add-module=/usr/local/src/nginx_upstream_hash-0.3/ --with-

pcre=/usr/local/src/pcre-7.7/ --prefix=/usr/local/nginx --with-

http_stub_status_module --without-select_module --without-poll_module

( 模块的选择请参考附录 )

#make

#make install

的命令,但并没有关闭 Nginx 的命令。原因是 Nginx 是通过信号量来控制 Ngin x

的,包括重启 Nginx 、停止 Nginx 等。

Nginx 支持下表中的信号:

有两种方式来通过这些信号去控制 Nginx :

1 ) 通过 logs 目录下的 nginx.pid 查看当前运行的 Nginx 的进程 ID ,通过

kill – XXX <pid> 来控制 Nginx ,其中 XXX 可通

cat $Nginx_HOME/logs/nginx.pid 来查看 。

2 )如果您的系统中只有一个 Nginx 进程,那您也可以通过 killall 命令来完

成,例如运行 killall – s HUP nginx 来让 Nginx 重新加载配置。

6. 6. 6. 6. 编写管理 Nginx 的脚步

从上面的叙述可知道, Nginx 是通过信号量来控制的,所以管理起来是比 较

麻烦的,但我们可以通过书写相应的脚本来达到方便管理。(这样的管理脚本在

网上很多,大家也可以在网上查找)

步骤如下:

1 ) cd /usr/local/nginx

2 ) mkdir bin

3 ) vi nginx.sh

4 )内容是:

-------------------------------------------------------------------------------

#!/bin/sh

NGINX_HOME=/usr/local/nginx

NGINX_SBIN=$NGINX_HOME/sbin/nginx

NGINX_CONF=$NGINX_HOME/conf/nginx.conf

NGINX_PID=$NGINX_HOME/logs/nginx.pid

NGINX_MAXFD=65535

信号名 作用描述

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

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

HUP 重新加载配置,并开启新的工作进程,关闭就的进

程,此操作不会中断请求

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

一个新的日志文件

USR2 平滑升级可执行程序

WINCH 从容关闭工作进程

NGINX_NAME="Nginx"

. /etc/rc.d/init.d/functions

if [ ! -f $NGINX_SBIN ]

then

echo "$NGINX_NAME startup: $NGINX_SBIN not exists! "

exit

fi

start() {

ulimit -HSn $NGINX_MAXFD

$NGINX_SBIN -c $NGINX_CONF

ret=$?

if [ $ret -eq 0 ]; then

action $"Starting $NGINX_NAME: " /bin/true

else

action $"Starting $NGINX_NAME: " /bin/false

fi

}

stop() {

kill `cat $NGINX_PID`

ret=$?

if [ $ret -eq 0 ]; then

action $"Stopping $NGINX_NAME: " /bin/true

else

action $"Stopping $NGINX_NAME: " /bin/false

fi

}

restart() {

stop

start

}

check() {

$NGINX_SBIN -c $NGINX_CONF -t

}

reload() {

kill -HUP `cat $NGINX_PID`

}

relog() {

kill -USR1 `cat $NGINX_PID`

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

check)

check

;;

reload)

reload

;;

relog)

relog

;;

*)

echo $"Usage: $0 {start|stop|restart|reload|check|relog}"

exit 1

esac

---------------------------------------------------------------------------

5 ) chmod +x nginx.sh

6 ) 现在可以通过如下方式来控制 Nginx

/usr/local/nginx/bin/nginx.sh start 启动

/usr/local/nginx/bin/nginx.sh stop 关闭

/usr/local/nginx/bin/nginx.sh restart 重新启动,即先关闭后启动

/usr/local/nginx/bin/nginx.sh reload 重新装载配置文件

/usr/local/nginx/bin/nginx.sh check 检查配置文件

/usr/local/nginx/bin/nginx.sh relog 重新打开日志文件

7. 7. 7. 7. 使用注意事项

1 ) 在生产运行中,请注意 Nginx 的日志,定期进行日志文件的归档和截断。

A 将现有日志文件 备份 ;

B /usr/local/nginx/bin/nginx.sh relog

2 ) 当要求 reload (重新装载配置文件)时, N ginx 会对配置文件进行检查, 如

果配置文件有错,那么会继续使用旧的,已装载完毕的配置文件运行。为保

证生产系统的稳定运行,修改完配置文件后,必须进行 check 操作,以确保

配置文件的正确性。

3 ) 为保证生产系统的稳定运行, N ginx 与 php-cgi 的通讯端口请使用 tcp/ip

方式,而不使用 unix 套接字。虽然 tcp/ip 效率较低,但是相对稳定,而 且

可以将 php 运行在其他机器上。当 php 应用运行较慢,并发请求多的情况 下 ,

使用 unix 套接字容易导致连接失败,从而报告 502 错误( Bad Gateway )。

Nginx Nginx Nginx Nginx 配置文件详解 配置文件详解 配置文件详解 配置文件详解

接下来,观察 一个 Nginx 默认 的配置文件 并解析其中的含义

#user nobody; ----- 工作进程的属主

# worker_processes 1; ----- 工作进程数,一般与 CUP 的核数相同

# error_log logs/error.log; ----- 这三个是 Nginx 的错误日志

# error_log logs/error.log notice;

#error_log logs/error.log info;

pid logs/nginx.pid; -----Nginx pid 文件存放路径

events {

# use epoll; -----Nginx 的工作模式, Linux 下性能最好的 event 模式

worker_connections 1024; ----- 每个工作进程允许最大的同时连接数

}

-----http ,设定 http 服务器,利用它的反响代理功能,并可以利用它的负载 均

衡功能

http {

include mime.types; ----- 设定 mime 类型

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 logs/access.log main; ----- 日志文件名

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on; ----- 是否开启 gzip 功能

-----server 设定虚拟主机

server {

listen 8 0 ;

server_name localhost;

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

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ .php$ {

# proxy_pass http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on

127.0.0.1:9000

#

#location ~ .php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /.ht {

# deny all;

#}

}

# another virtual host using mix of IP-, name-, and port-based

configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

# HTTPS server

#

#server {

# listen 443;

# server_name localhost;

# ssl on;

# ssl_certificate cert.pem;

# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;

# ssl_ciphers

ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

# ssl_prefer_server_ciphers on;

# location / {

# root html;

# index index.html index.htm;

# }

#}

}

(文件配置内容在逐步更新)

从上面 Nginx 默认的配置我们可以知道,我们可以通过编写相应的模块达到我 们

想要的效果。

Nginx Nginx Nginx Nginx 中的全局变量

通过例子学习

小例子:

1. 禁止访问某个目录下的文件

location ~ ^/data {

deny all;

}

2. 禁止多个目录

location ~ ^/(cron|templates)/ {

deny all;

break;

$args

$content_length

$content_type

$document_root

$document_uri

$host

$http_user_agent

$http_cookie

$limit_rate

$request_body_file

$request_method

$remote_addr

$remote_port

$remote_user

$request_filename

$request_uri

$query_string

$scheme

$server_protocol

$server_addr

$server_name

$server_port

$uri

}

3. 禁止以 /data 开头的文件

location ~ ^/data {

deny all;

}

4. 禁止单个目录

不能禁止 .log.txt 能请求

location /searchword/cron/ {

deny all;

}

5. 禁止单个文件

location ~ /data/sql/data.sql {

deny all;

}

6. 只允许固定的 IP 访问并有密码

location / {

root /opt/htdocs/www;

allow Address;

allow Address;

allow Address;

deny all;

auth_basic "C1G_ADMIN";

auth_basic_user_file htpasswd;

}

7. 文件和目录不存在的时候重定向:

if (!-e $request_filename) {

proxy_pass http://127.0.0.1;

}

(注意: Nginx 不允许 if 嵌套操作)

案例一:

要求 :

1) 配置两个虚拟主机,分别为:

A www.my.com.cn 根连接为 /data/html/my, 端口为 80

B www.My_two.com.cn 根连接为 /data/html/my_two, 端口为 8080)

2) 针对两个域名把 gif,jpg 图片设置过期时间为 1 个月 3) 对 html 、 css 、 js 进行压缩

1,2 的实现

server {

listen 8 0 ;

server_name www.my.com.cn ;

charset gb2312 ;

access_log /data/my/ logs/host.access.log main;

location / {

root /data/html/my ;

index index.html index.htm;

}

location ~*.(gif|jpg)$ {

Expires 30d;

}

}

server {

listen 8 080 ;

server_name www.My_two.com.cn ;

charset gb2312 ;

#access_log logs/host.access.log main;

location / {

root /data/html/my_two ;

index index.html index.htm;

}

location ~*.(gif|jpg)$ {

Expires 30d;

}

}

3 的实现

在 http 里添加 :

gzip on;

gzip_types text/plain text/css text/html text/javascript

案例二

利用 Nginx 实现负载均衡,来自

http://dianping.blog.51cto.com/427241/95274/ 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" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log off;

access_log logs/access.log;# 日志文件名

sendfile on;

#tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65;

include gzip.conf;

# 集群中的所有后台服务器的配置信息

upstream tomcats {

server 192.168.0.11:8080 weight=10;

server 192.168.0.12:8081 weight=10;

server 192.168.0.13:8080 weight=10;

server 192.168.0.14:8081 weight=10;

server 192.168.0.15:8080 weight=10;

server 192.168.0.16:8081 weight=10;

}

server {

listen 80;#HTTP 的端口

server_name localhost;

charset utf-8;

#access_log logs/host.access.log main;

location ~ ^/NginxStatus/ {

stub_status on; #Nginx 状态监控配置

access_log off;

auth_basic "NginxStatus";

auth_basic_user_file /usr/local/nginx/conf/htpasswd;

}

location ~ ^/(WEB-INF)/ {

deny all;

}

location ~ .(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|

zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {

root /opt/webapp;

expires 24h;

}

location / {

proxy_pass [url]http://tomcats;#[/url] 反向代理

include proxy.conf;

}

error_page 404 /html/404.html;

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

#

error_page 502 503 /html/502.html;

error_page 500 504 /50x.html;

location = /50x.html {

root html;

}

}

}

更具体地书写配置文件,在介绍完 rewrite 后会有更详细的介绍。

Nginx 监控要使用 Nginx 的监控功能必须有一个用户和密码,因此 我们必需生成一个

htppasswd 文件,这时候我们得用到 Apache 的 htpasswd 工具了。

生成 htppasswd 文件的方法:

#htpasswd -c /tmp/htpassswd user

输入两次密码就完成了,然后把生成好的 htpasswd 文件拷贝到 proxy 的机

器的 /usr/local/nginx/conf 目录下就行了。

有这个文件后,我们还要配置 conf 文件才能应用这一功能:

在根 {} 下书写以下模块

location ~^/NginxStatus{

stub_status on;

access_log on;

auth_basic "NginxStatus";

Auth_basic_user_file conf/htpasswd;

}

这个时候我们可以从浏览器中输入 http://ip/NginxStatus

输入验证账号后我们就可以看到相关的信息了,例如 ;

Active connection:10

Server accepts handled requests

9309 8982 28890

Reading:1 Writing:3 Waiting:6 Nginx Rewrite 基础

Rewrite 基本标记

last 相当于 Apache 里的 [L] 标记,表示完成 rewrite

break 终止匹配 , 不再匹配后面的规则

redirect 返回 302 临时重定向 地址栏会显示跳转后的地址

permanent 返回 301 永久重定向 地址栏会显示跳转后的地址

Rewrite Rewrite Rewrite Rewrite 正则表达式匹配

* ~ 为区分大小写匹配

* ~* 为不区分大小写匹配

* !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

Rewrite Rewrite Rewrite Rewrite 条件判断

-f 和 !-f 用来判断是否存在文件

-d 和 !-d 用来判断是否存在目录

-e 和 !-e 用来判断是否存在文件或目录

-x 和 !-x 用来判断文件是否可执行

Rewrite 应用实例 伪地址

/123456/xxxx -> /xxxx?id=123456

rewrite ^/(d+)/(.+)/ /$2?id=$1 last;

/[0-9]/my.html

rewrite

/(d+)/my.html /friend/my_list.jsp?uid=$1; break;

通过伪地址能提高你网站的安全性,这样暴露给用户的是一个假的地址。

域名跳转

简单域名跳转

server

{

listen 80;

server_name sky .com;

index index.html index.htm index.php;

root /opt/ sky /www;

rewrite ^/ http:// skybin090804.cublog .c n /;

access_log off;

}

多域名转向

server_name www.sky.com www.sky.net;

index index.html index.htm index.php;

root /data/sky;

if ($host ~ "sky.net") {

rewrite ^(.*) http://www.sky.com$1 permanent;

}

Nginx 相关知识在更新中 附录

Nginx Nginx Nginx Nginx 编译模块名称解析 编译模块名称解析 编译模块名称解析 编译模块名称解析

– prefix=PATH 设定安装目录

– sbin-path=PATH 设定程序文件目录

– conf-path=PATH 设定配置文件 (nginx.conf) 目录

– error-log-path=PATH 设定错误日志目录

– pid-path=PATH 设定 pid 文件 (nginx.pid) 目录

– lock-path=PATH 设定 lock 文件 (nginx.lock) 目录

– user=USER 设定程序运行的用户环境 (www)

– group=GROUP 设定程序运行的组环境 (www)

– builddir=DIR 设定程序编译目录

– with-rtsig_module 允许 rtsig 模块

– with-select_module 允许 select 模块 ( 一种轮询模式 , 不推荐用在高载环境 )

– without-select_module 不使用 select 模块

– with-poll_module 允许 poll 模块 ( 一种轮询模式 , 不推荐用在高载环境 )

– without-poll_module 不使用 poll 模块

– with-http_ssl_module 允许 ngx_http_ssl_module 模块 (Apache 对应 :mod_ssl)

– with-http_realip_module 允许 ngx_http_realip_module 模块 (mod_rpaf)

– with-http_addit ion_module 允许 ngx_http_addit ion_module 模块 (mod_layout)

– with-http_xslt_module 允许 ngx_http_xslt_module 模块

– with-http_sub_module 允许 ngx_http_sub_module 模块

– with-http_dav_module 允许 ngx_http_dav_module 模块 (mod_dav)

– with-http_flv_module 允许 ngx_http_flv_module 模块 (mod_flvx)

– with-http_gzip_stat ic_module 允许 ngx_http_gzip_static_module 模块 (mod_dflate)

– with-http_random_index_module 允许 ngx_http_random_index_module 模块 (mod_autoindex)

– with-http_stub_status_module 允许 ngx_http_stub_status_module 模块 (mod_status)

– without-http_charset_module 不使用 ngx_http_charset_module 模块

– without-http_gzip_module 不使用 ngx_http_gzip_module 模块

– without-http_ssi_module 不使用 ngx_http_ssi_module 模块

– without-http_userid_module 不使用 ngx_http_userid_module 模块

– without-http_access_module 不使用 ngx_http_access_module 模块

– without-http_auth_basic_module 不使用 ngx_http_auth_basic_module 模块

– without-http_autoindex_module 不使用 ngx_http_autoindex_module 模块

– without-http_geo_module 不使用 ngx_http_geo_module 模块

– without-http_map_module 不使用 ngx_http_map_module 模块

– without-http_referer_module 不使用 ngx_http_referer_module 模块

– without-http_rewrite_module 不使用 ngx_http_rewrite_module 模块

– without-http_proxy_module 不使用 ngx_http_proxy_module 模块

– without-http_fastcgi_module 不使用 ngx_http_fastcgi_module 模块

– without-http_memcached_module 不使用 ngx_http_memcached_module 模块

– without-http_limit_zone_module 不使用 ngx_http_limit_zone_module 模块

– without-http_empty_gif_module 不使用 ngx_http_empty_gif_module 模块

– without-http_browser_module 不使用 ngx_http_browser_module 模块

– without-http_upstream_ip_hash_module

不使用 ngx_http_upstream_ip_hash_module 模块

– with-http_perl_module 允许 ngx_http_perl_module 模块

– with-perl_modules_path=PATH 设置 perl 模块路径

– with-perl=PATH 设置 perl 库文件路径

– http-log-path=PATH 设置 access log 文件路径

– http-client-body-temp-path=PATH 设置客户端请求临时文件路径

– http-proxy-temp-path=PATH 设置 http proxy 临时文件路径

– http-fastcgi-temp-path=PATH 设置 http fastcgi 临时文件路径

– without-http 不使用 HTTP server 功能

– with-mail 允许 POP3/IMAP4/SMTP 代理模块

– with-mail_ssl_module 允许 ngx_mail_ssl_module 模块

– without-mail_pop3_module 不允许 ngx_mail_pop3_module 模块

– without-mail_imap_module 不允许 ngx_mail_imap_module 模块

– without-mail_smtp_module 不允许 ngx_mail_smtp_module 模块

– with-google_perftools_module 允许 ngx_google_perftools_module 模块 ( 调试用 )

– with-cpp_test_module 允许 ngx_cpp_test_module 模块

– add-module=PATH 允许使用外部模块 , 以及路径

– with-cc=PATH 设置 C 编译器路径

– with-cpp=PATH 设置 C 预处理路径

– with-cc-opt=OPTIONS 设置 C 编译器参数

– with-ld-opt=OPTIONS 设置连接文件参数

– with-cpu-opt=CPU 为指定 CPU 优化 , 可选参数有 :

pentium, pentiumpro, pentium3, pentium4,

athlon, opteron, sparc32, sparc64, ppc64

– without-pcre 不使用 pcre 库文件

– with-pcre=DIR 设定 PCRE 库路径

– with-pcre-opt=OPTIONS 设置 PCRE 运行参数

– with-md5=DIR 设定 md5 库文件路径

– with-md5-opt=OPTIONS 设置 md5 运行参数

– with-md5-asm 使用 md5 源文件编译

– with-sha1=DIR 设定 sha1 库文件路径

– with-sha1-opt=OPTIONS 设置 sha1 运行参数

– with-sha1-asm 使用 sha1 源文件编译

– with-zlib=DIR 设定 zlib 库文件路径

– with-zlib-opt=OPTIONS 设置 zlib 运行参数

– with-zlib-asm=CPU 使 zlib 对特定的 CPU 进行优化 , 可选参数 :

pentium, pentiumpro

– with-openssl=DIR 设定 OpenSSL 库文件路径

– with-openssl-opt=OPTIONS 设置 OpenSSL 运行参数

– with-debug 允许调试日志

介绍一个 Nginx 外部模块 :

ngx_http_accesskey_module

封堵下载软件的好东东 , 只有远程 IP 地址符合加密字串的才被允许访问 . 示例如下 :

location /download {

accesskey on;

accesskey_hashmethod md5;

accesskey_arg “ key ” ;

accesskey_signature “ mypass$remote_addr ” ;

}

模块地址 :

http://wiki.codemongers.com/NginxHttpAccessKeyModule

其它更多外部模块请访问 :

http://wiki.codemongers.com/NginxModules

在 OpenBSD 环境下安装 Nginx 需要注意下 , 在 ./configure 之后还需要修改一下源文件,否则

后面 make 过不去 :

vi +74 src/os/unix/ngx_posix_config.h

将这行的 malloc.h 改成 stdlib.h, 保存退出 .

然后再执行 make && make install 即可 !