一:Nginx介绍php
1.Nginx简介:nginx [engine x]是一个俄罗斯人编写的HTTP和反向代理服务器,另外它也能够做为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex、Mail.Ru、VKontakte,以及Rambler。据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48%使用Nginx做为其服务器或者代理服务器。部分红功案例请见: Netflix, Wordpress.com, FastMail.FM。html
2.总体采用模块化设计是nginx的一个重大特色,甚至http服务器核心功能也是一个模块。要注意的是:nginx的模块是静态的,添加和删除模块都要对nginx进行从新编译,这一点与Apache的动态模块彻底不一样。nginx
3.Nginx做为负载均衡服务器: Nginx 既能够在内部直接支持 Rails 和 PHP 程序对外进行服务, 也能够支持做为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不管是系统资源开销仍是CPU使用效率都比 Perlbal 要好不少. 。Nginx可做为7层负载均衡服务器来使用。web
4.Nginx与PHP集成:自PHP-5.3.3起,PHP-FPM加入到了PHP核心,编译时加上--enable-fpm便可提供支持。 PHP-FPM以守护进程在后台运行,Nginx响应请求后,自行处理静态请求,PHP请求则通过fastcgi_pass交由PHP-FPM处理,处理完毕后返回。 Nginx和PHP-FPM的组合,是一种稳定、高效的PHP运行方式,效率要比传统的Apache和mod_php高出很多。正则表达式
基本的HTTP服务器特性shell
处理静态文件,索引文件以及自动索引;打开文件描述符缓存;apache
使用缓存加速反向代理;简单负载均衡以及容错;vim
远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;简单的负载均衡以及容错;后端
模块化的架构。过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI 过滤器中,一个包含多个SSI的页面,若是经由FastCGI或反向代理处理,可被并行处理;centos
支持SSL,TLS SNI。
其余的HTTP服务器特性
基于名字和IP的虚拟主机;
Keep-alive和pipelined链接支持;
灵活的配置;
从新加载配置以及在线升级时,不须要中断正在处理的请求;
自定义访问日志格式,带缓存的日志写操做以及快速日志轮转;
3xx-5xx错误代码重定向;
重写(rewrite)模块:使用正则表达式改变URI;
根据客户端地址执行不一样的功能;
基于客户端IP地址和HTTP基本认证机制的访问控制;
支持验证HTTP referer;
支持PUT、DELETE、MKCOL、COPY以及MOVE方法;
支持FLV流和MP4流;
速度限制;
来自同一地址的同时链接数或请求数限制;
嵌入Perl语言。
邮件代理服务器特性
使用外部HTTP认证服务器重定向用户到IMAP/POP3后端;
使用外部HTTP认证服务器认证用户后重定向链接到内部SMTP后端;
支持的认证方式:
POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
SSL支持;
STARTTLS和STLS支持。
二:具体配置步骤
//环境说明
1.系统为centos6.4
2.nginx编译安装在IP:10.10.54.157上,并配合其它几台web服务器实现负载均衡
3.nginx服务器即看成一台反向代理服务器,又看成一台web服务器和其它几台web服务器配合实现负载均衡
4.web服务器能够是apache,要实现负载均衡,先得保证每台web服务器能够独立被访问
5.环境中有不止一台web服务器,nginx服务器的功能就是把用户的链接请求均衡负载到每台web服务器上
//nginx编译安装
shell> ./configure --prefix=/usr/local/nginx --user=apache --group=apache --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module && make && make install #参数解释 --prefix=PATH set installation prefix --user=USER set non-privileged user for --group=GROUP set non-privileged group for --with-http_ssl_module enable ngx_http_ssl_module --with-http_stub_status_module enable ngx_http_stub_status_module #支持监控 --with-http_gzip_static_module enable ngx_http_gzip_static_module #支持压缩 #启动nginx shell> /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #测试nginx配置文件格式是否正确 shell> /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf #关闭nginx shell> cat /usr/local/nginx/logs/nginx.pid | xargs kill -TERM #重启nginx shell> cat /usr/local/nginx/logs/nginx.pid | xargs kill -HUP HUP 重启 TERM,INT 快速中止 USR1 从新打开日志文件,用于日志切割 USR2 平滑升级可执行程序 QUIT 从容关闭 WINCH 从容关闭工做进程
//nginx服务器配置
#编辑nginx主配置文件 shell> vim /usr/local/nginx/conf/nginx.conf user apache apache; worker_processes 2; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } 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 logs/access.log main; sendfile on; tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; include virtual/www_zijian_com_conf; #包含虚拟主机文件目录 } #编辑虚拟配置文件 shell> mkdir /usr/local/nginx/conf/virtual shell> cd /usr/local/nginx/conf/virtual shell> vim www_zijian_com_conf -------------------------------------------- upstream www_zijian_com { server 10.10.54.157:8080 max_fails=3 weight=2 fail_timeout=60s; #本机也充当一台web服务器 server 10.10.54.159:10081 max_fails=3 weight=1 fail_timeout=60s; #10.10.54.159这个web服务器上的10081端口正在监听状态 server 10.10.54.152:10080 max_fails=3 weight=3 fail_timeout=60s; server 10.10.54.150:1500 max_fails=3 weight=4 fail_timeout=60s; } #nginx服务器在www.zijian.com:80(下面的配置中)端口监听来自客户端的链接,而后经过反向代理,由upstream部分决定吧用户的请求负载到哪台web服务器上,weight=number参数能够指定某台web服务器的权重 server { listen 80; server_name www.zijian.com; #nginx服务器访问地址,浏览器中输入的是这个网址 charset uft-8; access_log logs/www.access.log main; index index.html; location / { proxy_pass http://www_zijian_com; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #nginx服务器自己也充当web服务器,因此这里也要配置 server { listen 8080; server_name www.zijian.com; charset uft-8; access_log logs/www.access.log main; root /var/www/html; index index.html; } -------------------------------------------- #浏览器中输入www.zijian.com 测试nginx负载均衡 #注意:浏览器的缓存会干扰测试结果,因此你要确保www.ziji被正确解析为nginx服务器的IP,这个例子中是10.10.54.15 #虚拟配置文件另外一中形式 ----------------------------------------------------------------------- upstream www_zijian_com { server 10.10.54.159:10081 max_fails=3 weight=1 fail_timeout=60s; #仅有三台web server负载 server 10.10.54.157:8080 max_fails=3 weight=2 fail_timeout=60s; #本机web服务器 server 10.10.54.152:10080 max_fails=3 weight=3 fail_timeout=60s; } server { listen 80; server_name www.zijian.com; charset uft-8; access_log logs/www.access_nginx.log main; index index.html; location / { proxy_pass http://www_zijian_com; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #不一样与上一个配置文件,当upstream把用户请求负载到10.10.54.157:8080上时,再一次启动代理,代理到10.10.54.150:1500端口 server { listen 8080; #监听8080端口 access_log logs/www.access_nginx.log main; location / { proxy_pass http://10.10.54.150:1500; } } ----------------------------------------------------------------------------------