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 的朋友都读过阿叶大哥的利用 nginx 实现负载均衡 . 直到 2007 年 4 月, 俄 罗 斯大约有 20% 左右的虚拟主机是由 nignx 服务或代理的。 Google 在线安全博 客中统计 nginx 服务或代理了大约所有 Internet 虚拟主机的 4% 。而 netcraft 的统计显示, nginx 服务的主机在过去的一年里以四倍的速度增长短短的几年 里, 它的排名已跃进第 9 。 ( 参见: http://survey./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. ,国内较好的中文站点为 http://www. ) 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 库的最新稳定版本 ) 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. 根连接为 /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. ; 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. www.; index index.html index.htm index.php; root /data/sky; if ($host ~ "sky\.net") { rewrite ^(.*) http://www.$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./NginxHttpAccessKeyModule 其它更多外部模块请访问 : http://wiki./NginxModules 在 OpenBSD 环境下安装 Nginx 需要注意下 , 在 ./configure 之后还需要修改一下源文件,否则 后面 make 过不去 : vi +74 src/os/unix/ngx_posix_config.h 将这行的 malloc.h 改成 stdlib.h, 保存退出 . 然后再执行 make && make install 即可 !< begin ajax random post data > 以上模块解析来自: http://www.oschina.net/bbs/thread/719 |
|