Nginx 安装配置

qi_song 贡献于2014-01-07

作者 雨林木风  创建于2009-09-06 12:35:00   修改者雨林木风  修改于2009-09-06 12:39:00字数11885

文档摘要:Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor 将源代码以类 BSD 许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
关键词:

Nginx安装配置 2008-08-27 16:27:43  标签:Nginx   [推送到技术圈] Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor 将源代码以类 BSD 许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。 根据最新一期(08 年 6 月份)的 NetCraft 调查报告显示,已经有超过两百万的主机使用了 Nginx,这个数字超过了另外一个轻量级的 HTTP 服务器 lighttpd, 排名第四,并且发展迅速。下面是这份报告的前几名的报表: 产品 网站数 Apache 84,309,103 IIS 60,987,087 Google GFE 10,465,178 Unknown 4,903,174 nginx 2,125,160 Oversee 1,953,848 lighttpd 1,532,952 关于这期调查报告的更详细信息请看下面链接: [url]http://survey.netcraft.com/Reports/200806/[/url] 下图是最近几个月使用 Nginx 和 lighttpd 的网站数比较 图 1. 最近几个月使用 Nginx 和 lighttpd 的网站数比较 使用 Nginx 前必须了解的事项 1. 目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用; 2. Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等; 3. Nginx 支持简单的负载均衡和容错; 4. 支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有。 在 Linux 下安装 Nginx 为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Compatible Regular Expressions)包。您可以到 [url]ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/[/url] 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包: ./configure make make install 修改 objs/Makefile 注释掉以下内容: ./configure --disable-shared mkdir -p /usr/local/lib/.libs/ cp /usr/local/lib/libpcre.a /usr/local/lib/.libs/libpcre.a ./configure --prefix=/usr/local/nginx \ --with-pcre=/usr/local/lib \ --with-http_stub_status_module \ --with-http_stub_status_module \ --with-http_addition_module \ --with-http_realip_module \ --with-http_flv_module \ --with-debug make make install 启动 /usr/local/nginx/sbin/nginx 其中参数 --with-http_stub_status_module 是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态。 安装成功后 /opt/nginx 目录下有四个子目录分别是:conf、html、logs、sbin 。其中 Nginx 的配置文件存放于 conf/nginx.conf,Nginx 只有一个程序文件位于 sbin 目录下的 nginx 文件。确保系统的 80 端口没被其他程序占用,运行 sbin/nginx 命令来启动 Nginx,打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。 常用的 Nginx 参数和控制 程序运行参数 Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个: -c :使用指定的配置文件而不是 conf 目录下的 nginx.conf 。 -t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。 -v:显示 nginx 版本号。 -V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。 例如我们要测试某个配置文件是否书写正确,我们可以使用以下命令 sbin/nginx – t – c conf/nginx2.conf 通过信号对 Nginx 进行控制 Nginx 支持下表中的信号: 信号名 作用描述 TERM, INT 快速关闭程序,中止当前正在处理的请求 QUIT 处理完当前请求后,关闭程序 HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求 USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件 USR2 平滑升级可执行程序 WINCH 从容关闭工作进程 有两种方式来通过这些信号去控制 Nginx,第一是通过 logs 目录下的 nginx.pid 查看当前运行的 Nginx 的进程 ID,通过 kill – XXX 来控制 Nginx,其中 XXX 就是上表中列出的信号名。如果您的系统中只有一个 Nginx 进程,那您也可以通过 killall 命令来完成,例如运行 killall – s HUP nginx 来让 Nginx 重新加载配置。 配置 Nginx 先来看一个实际的配置文件: user nobody;# 工作进程的属主 worker_processes 4;# 工作进程数,一般与 CPU 核数等同 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll;#Linux 下性能最好的 event 模式 worker_connections 2048;# 每个工作进程允许最大的同时连接数 } 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; } loca tion ~ \.(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; } } } Nginx 监控 我们必需生成一个htppasswd文件,这时候我们得用到 Apache的htpasswd 工具了, 我们这台代理服务器上没有Apache,现在只能依靠web服务器的了,去那生成一个复制过来。 生成htppasswd文件的方法: #htpasswd -c /tmp/htpassswd user 输入两次密码就完成了,然后把生成好的htpasswd文件拷贝到proxy的机器的/usr/local/etc/nginx/conf目录下就行了。 上面是一个实际网站的配置实例。上述配置中,首先我们定义了一个 location ~ ^/NginxStatus/,这样通过 [url]http://localhost/NginxStatus/[/url] 就可以监控到 Nginx 的运行信息,显示的内容如下: Active connections: 70 server accepts handled requests 14553819 14553819 19239266 Reading: 0 Writing: 3 Waiting: 67 NginxStatus 显示的内容意思如下: · active connections – 当前 Nginx 正处理的活动连接数。 · server accepts handled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。 · reading -- nginx 读取到客户端的 Header 信息数。 · writing -- nginx 返回给客户端的 Header 信息数。 · waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。 静态文件处理 通过正则表达式,我们可让 Nginx 识别出各种静态文件,例如 images 路径下的所有请求可以写为: location ~ ^/images/ { root /opt/webapp/images; } 而下面的配置则定义了几种文件类型的请求处理方式。 location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ { root /opt/webapp; expires 24h; } 对于例如图片、静态 HTML 文件、js 脚本文件和 css 样式文件等,我们希望 Nginx 直接处理并返回给浏览器,这样可以大大的加快网页浏览时的速度。因此对于这类文件我们需要通过 root 指令来指定文件的存放路径,同时因为这类文件并不常修改,通过 expires 指令来控制其在浏览器的缓存,以减少不必要的请求。 expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)。您可以使用例如以下的格式来书写 Expires: expires 1 January, 1970, 00:00:01 GMT; expires 60s; expires 30m; expires 24h; expires 1d; expires max; expires off; 动态页面请求处理 Nginx 本身并不支持现在流行的 JSP、ASP、PHP、PERL 等动态页面,但是它可以通过反向代理将请求发送到后端的服务器,例如 Tomcat、Apache、IIS 等来完成动态页面的请求处理。前面的配置示例中,我们首先定义了由 Nginx 直接处理的一些静态文件请求后,其他所有的请求通过 proxy_pass 指令传送给后端的服务器(在上述例子中是 Tomcat)。最简单的 proxy_pass 用法如下: location / { proxy_pass [url]http://localhost:8080;[/url] proxy_set_header X-Real-IP $remote_addr; } 这里我们没有使用到集群,而是将请求直接送到运行在 8080 端口的 Tomcat 服务上来完成类似 JSP 和 Servlet 的请求处理。 当页面的访问量非常大的时候,往往需要多个应用服务器来共同承担动态页面的执行操作,这时我们就需要使用集群的架构。 Nginx 通过 upstream 指令来定义一个服务器的集群,最前面那个完整的例子中我们定义了一个名为 tomcats 的集群,这个集群中包括了三台服务器共 6 个 Tomcat 服务。而 proxy_pass 指令的写法变成了: location / { proxy_pass [url]http://tomcats;[/url] proxy_set_header X-Real-IP $remote_addr; } 在 Nginx 的集群配置中,Nginx 使用最简单的平均分配规则给集群中的每个节点分配请求。一旦某个节点失效时,或者重新起效时,Nginx 都会非常及时的处理状态的变化,以保证不会影响到用户的访问。 总结 尽管整个程序包只有五百多 K,但麻雀虽小、五脏俱全。 Nginx 官方提供的各种功能模块应有尽有,结合这些模块可以完整各种各样的配置要求,例如:压缩、防盗链、集群、FastCGI、流媒体服务器、 Memcached 支持、URL 重写等等,更关键的是 Nginx 拥有 Apache 和其他 HTTP 服务器无法比拟的高性能。您甚至可以在不改变原有网站的架构上,通过在前端引入 Nginx 来提升网站的访问速度。 如果您的网站是运行在 Linux 下,如果您并没有使用一些非常复杂的而且确定 Nginx 无法完成的功能,那您应该试试 Nginx 。 Nginx作为一个后起之秀,他的迷人之处已经让很多人都投入了他的怀抱。配置简单,实现原理简单。做一个负载平衡的再好不过了。 其原理: 简单介绍一下他的安装及配置过程 官方网站 http://wiki.codemongers.com/Main 一、依赖的程序 1. gzip module requires zlib library 2. rewrite module requires pcre library 3. ssl support requires openssl library 二、安装 ./configure make make install 默认安装的路径是/usr/local/nginx 更多的安装配置 ./configure --prefix=/usr/local/nginx --with-openssl=/usr/include (启用ssl) --with-pcre=/usr/include/pcre/ (启用正规表达式) --with-http_stub_status_module (安装可以查看nginx状态的程序) --with-http_memcached_module (启用memcache缓存) --with-http_rewrite_module (启用支持url重写) 三、启动及重启 启动:nginx 重启:kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 测试配置文件:nginx -t 简单吧,安装,启动都比较方便。 四、配置文件 http://wiki.codemongers.com/NginxFullExample #运行用户  1user  nobody nobody;  2#启动进程  3worker_processes  5;  4#全局错误日志及PID文件  5error_log  logs/error.log notice;  6pid        logs/nginx.pid;  7#工作模式及连接数上限  8events {  9#工作模式有:select(标准模式),poll(标准模式),kqueue(高效模式,适用FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 and MacOS X), 10#epoll(高效模式,本例用的。适用Linux 2.6+,SuSE 8.2,),     #/dev/poll(高效模式,适用Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+) 11use epoll; 12worker_connections      1024; 13} 14#设定http服务器,利用它的反向代理功能提供负载均衡支持 15http { 16#设定mime类型 17include      conf/mime.types; 18default_type  application/octet-stream; 19#设定日志格式 20log_format main        '$remote_addr - $remote_user [$time_local] ' 21                       '"$request" $status $bytes_sent ' 22                       '"$http_referer" "$http_user_agent" ' 23                       '"$gzip_ratio"'; 24 25log_format download    '$remote_addr - $remote_user [$time_local] '                       '"$request" $status $bytes_sent '                       '"$http_referer" "$http_user_agent" '                       '"$http_range" "$sent_http_content_range"' ; 26#设定请求缓冲 27client_header_buffer_size    10k; 28large_client_header_buffers  4 4k; 29 30#开启gzip模块,要求安装gzip 在运行./config时要指定 31gzip on; 32gzip_min_length  1100; 33gzip_buffers    4 8k; 34gzip_types      text/plain; 35output_buffers  1 32k; 36postpone_output  1460; 37#设定访问日志 38access_log  logs/access.log  main; 39client_header_timeout  3m; 40client_body_timeout    3m; 41send_timeout          3m; 42sendfile                on; 43tcp_nopush              on; 44tcp_nodelay            on; 45keepalive_timeout  65; 46 47#设定负载均衡的服务器列表 48upstream backserver { 49#weigth参数表示权值,权值越高被分配到的几率越大 50#本例是指在同一台服务器,多台服务器改变ip即可 51server 127.0.0.1:8081 weight=5; 52server 127.0.0.1:8082; 53server 127.0.0.1:8083; 54}    #Deny access to any host other than (www).4535.com    server {        server_name  _;  #default        return 404;    }     55#设定虚拟主机,默认为监听80端口,改成其他端口会出现问题 56server { 57listen         80; 58server_name    test.com www.test.com; 59charset utf8; 60#设定本虚拟主机的访问日志 61access_log  logs/test.com.log  main; 62#如果访问 /images/*, /js/*, /css/* 资源,则直接取本地文件,不用转发。但如果文件较多效果不是太好。 63location ~ ^/(images|js|css)/  { 64root    /usr/local/testweb; 65expires 30m; 66} 67#对 "/" 启用负载均衡 68location / { 69proxy_pass      http://backserver; 70proxy_redirect          off; 71proxy_set_header        Host $host; 72proxy_set_header        X-Real-IP $remote_addr; 73proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 74client_max_body_size    10m; 75client_body_buffer_size 128k; 76proxy_connect_timeout  90; 77proxy_send_timeout      90; 78proxy_read_timeout      90; 79proxy_buffer_size      4k; 80proxy_buffers          4 32k; 81proxy_busy_buffers_size 64k; 82proxy_temp_file_write_size 64k;} 83#设定查看Nginx状态的地址,在运行./config 要指定,默认是不安装的。 84location /NginxStatus { 85stub_status            on; 86access_log             on; 87auth_basic             "NginxStatus"; 88#是否要通过用户名和密码访问,测试时可以不加上。conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可#auth_basic_user_file  conf/htpasswd; 89} 90} 91 Nginx 安装配置 2009年2月6日(星期五) 14点52分 作者: 纯净水 天气: 心情: 一般 一、) 安装Nginx 1.) 安装 Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。据说他当初是F5的成员之一,英文主页: http://nginx.net。俄罗斯的一些大网站已经使用它超过两年多了,一直表现不凡。 在这里,需要说明一下,由于Nginx的配置文件中我想用到正则,所以需要 pcre 模块的支持。 可以到这里下载一个http://www.pcre.org/ 解压再cp到和nginx同一个目录上 Nginx的编译参数如下: tar zxvf nginx-0.5.33.tar.gz cd nginx-0.5.33/ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module  --with-pcre=../pcre-6.6 make && make install 2.) 修改配置文件 /usr/local/nginx/conf/nginx.conf 以下是我的 nginx.conf 内容,仅供参考: #运行用户 user  nobody nobody; #启动进程 一般和cpu数对等,压力大的也可以调高点 worker_processes  2; #全局错误日志及PID文件 error_log  logs/error.log notice; pid        logs/nginx.pid; #工作模式及连接数上限 events {         use epoll;         worker_connections      1024; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http {         #设定mime类型         include       conf/mime.types;         default_type  application/octet-stream;         #设定日志格式         log_format main         '$remote_addr - $remote_user [$time_local] '                                                 '"$request" $status $bytes_sent '                                                 '"$http_referer" "$http_user_agent" '                                                 '"$gzip_ratio"';         log_format download '$remote_addr - $remote_user [$time_local] '                                                 '"$request" $status $bytes_sent '                                                 '"$http_referer" "$http_user_agent" '                                                 '"$http_range" "$sent_http_content_range"';         #设定请求缓冲         client_header_buffer_size    1k;         large_client_header_buffers  4 4k;         #开启gzip模块         gzip on;         gzip_min_length  1100;         gzip_buffers     4 8k;         gzip_types       text/plain;         output_buffers   1 32k;         postpone_output  1460;         #设定access log         access_log  logs/access.log  main;         client_header_timeout  3m;         client_body_timeout    3m;         send_timeout           3m;         sendfile                on;         tcp_nopush              on;         tcp_nodelay             on;         keepalive_timeout  65;         #设定负载均衡的服务器列表         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 {                 listen          80;                 server_name     192.168.8.1 www.yejr.com;                 charset gb2312;                 #设定本虚拟主机的访问日志                 access_log  logs/www.yejr.com.access.log  main;                 #如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid                 #如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好                 location ~ ^/(img|js|css)/  {                         root    /data3/Html;                         expires 24h;                 }                 #对 "/" 启用负载均衡                 location / {                         proxy_pass      http://mysvr;                         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;                         client_max_body_size    10m;                         client_body_buffer_size 128k;                         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状态的地址                 location /NginxStatus {                         stub_status             on;                         access_log              on;                         auth_basic              "NginxStatus";                         auth_basic_user_file  conf/htpasswd;                 }         } } 运行以下命令检测配置文件是否无误:   如果没有报错,那么就可以开始运行Nginx了,执行以下命令即可:   备注:conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可,内容大致如下:   3.) 查看 Nginx 运行状态   输入地址 http://192.168.8.1/NginxStatus/,输入验证帐号密码,即可看到类似如下内容: Active connections: 328 server accepts handled requests 9309 8982 28890 Reading: 1 Writing: 3 Waiting: 324   第一行表示目前活跃的连接数   第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。   第四行是当前处理的请求数

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档