Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由俄罗斯的程序设计师IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004104日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强。在高并发连接的情况下,NginxApache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache10倍。

Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如京东、新浪、网易、腾讯、淘宝等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。

 

Nginx工作模式(转)

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location blocklocationNginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块,HTTP模块、EVENT模块和MAIL模块等属于核心模块,HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基本模块,而HTTP Upstream Request Hash模块、Notice模块和HTTPAccess Key模块属于第三方模块,用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。

 

Nginx的模块从功能上分为三类,分别是:

Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个。

Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx 输出。

Proxies (代理类模块)。就是Nginx HTTPUpstream 之类的模块

 

在工作方式上,Nginx分为单工作进程和多工作进程两种模式。

在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;

在多工作进程模式下,每个工作进程包含多个线程。

Nginx默认为单工作进程模式。

Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,不像在Apache一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。

 

Nginx 通过事件驱动相应多个用户,使用一个工作线程来响应多个不同的用户请求

prework 是一个进程响应一个用户请求

worker是一个线程响应一个用户请求

 

为此nginx适合于高并发的场景需求,并且nginx对静态内容响应较快,但是nginx不支持CGI

在应用是nginx时,nginx主要是工作在web的前端,实现反向代理

1.原码安装

获取nginx压缩包

[root@server1 ~]# tar zxfnginx-1.10.1.tar.gz

通过修改文件使得安装的nginx不显示版本号更加安全。

[root@server1 ~]# ls

anaconda-ks.cfg  install.log install.log.syslog nginx-1.10.1  nginx-1.10.1.tar.gz

[root@server1 ~]# cd nginx-1.10.1/src/core/

[root@server1 core]# vim nginx.h

企业部分之lnmp环境的搭建:Nginx_负载均衡

vim nginx.h

 企业部分之lnmp环境的搭建:Nginx_nginx _02

如图做修改。去掉版本号。

./configure --prefix=/usr/local/lnmp/nginx--user=nginx --group=nginx --with-

http_stub_status_module--with-http_ssl_module

 

[root@server1nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx--with-http_ssl_module --with-http_stub_status_module

 

 

出现如下图错误提示

企业部分之lnmp环境的搭建:Nginx_负载均衡_03

 [root@server1 nginx-1.10.1]#  yum install pcre-devel -y

出现如下图错误

企业部分之lnmp环境的搭建:Nginx_负载均衡_04

[root@server1nginx-1.10.1]# yum install openssl-devel -y

[root@server1nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx--with-http_ssl_module --with-http_stub_status_module

然后 [root@server1nginx-1.10.1]# make && make install

[root@server1nginx-1.10.1]# cd /usr/local/lnmp/nginx/sbin/

[root@server1sbin]# ./nginx

[root@server1sbin]# netstat -antlp

企业部分之lnmp环境的搭建:Nginx_负载均衡_05

[root@server1sbin]# curl -I localhost

企业部分之lnmp环境的搭建:Nginx_负载均衡_06

开机自启动

[root@server1~]# vim /etc/rc.local

企业部分之lnmp环境的搭建:Nginx_负载均衡_07

添加软连接

[root@server1~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

网页测试

企业部分之lnmp环境的搭建:Nginx_nginx _08

自动监控模块

location/status {

            stub_status on;

            access_log off;

        }

企业部分之lnmp环境的搭建:Nginx_nginx _09

2加载动态模块

企业部分之lnmp环境的搭建:Nginx_nginx _10

企业部分之lnmp环境的搭建:Nginx_nginx _11

企业部分之lnmp环境的搭建:Nginx_负载均衡_12

3修改/usr/local/lnmp/nginx/conf/nginx.conf优化nginx功能

 

[root@server1~]# ps aux

企业部分之lnmp环境的搭建:Nginx_nginx _13

企业部分之lnmp环境的搭建:Nginx_负载均衡_14

[root@server1~]# lscpu

企业部分之lnmp环境的搭建:Nginx_nginx _15

[root@server1~]# vim /usr/local/lnmp/nginx/conf/nginx.conf

企业部分之lnmp环境的搭建:Nginx_负载均衡_16

[root@server1~]# nginx -t

nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok

nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@server1~]# nginx -s reload

 

[root@server1~]# ulimit

unlimited

[root@server1~]# ulimit -a

企业部分之lnmp环境的搭建:Nginx_nginx _17

Shell ×××(cpu内存全部占满

[root@server1~]# :(){ :|:& };:

如果按下面方法限制用户使用的进程数量,会避免shell×××把内存占满而卡死

 

[root@server1~]# vim /etc/security/limits.conf 

企业部分之lnmp环境的搭建:Nginx_负载均衡_18

4.制作证书

 server {

        listen       443 ssl;

        server_name server1.example.com;

 

        ssl_certificate      cert.pem;

        ssl_certificate_key  cert.pem;

 

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

 

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;

 

        location / {

            root   html;

            index  index.html index.htm;

        }

    }

 

 

 

[root@server1~]# cd /etc/pki/tls/certs/

[root@server1certs]# ls

ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile renew-dummy-cert

[root@server1certs]# make cert.pem

出现如下图

企业部分之lnmp环境的搭建:Nginx_nginx _19

对应位置写入相关内容:

CountryName (2 letter code) [XX]:CN

State orProvince Name (full name) []:shanghai

LocalityName (eg, city) [Default City]:shanghai

OrganizationName (eg, company) [Default Company Ltd]:westos

OrganizationalUnit Name (eg, section) []:linux

CommonName (eg, your name or your server's hostname) []:server1.example.com

EmailAddress []:root@server1.example.com

生成证书后

[root@server1certs]# mv cert.pem /usr/local/lnmp/nginx/conf/

 

[root@server1~]# vim /usr/local/lnmp/nginx/conf/nginx.conf

加入网页重写

企业部分之lnmp环境的搭建:Nginx_nginx _20

[root@server1certs]# nginx -t

[root@server1certs]# nginx -s reload

完成http https之间的转换。

网页测试

企业部分之lnmp环境的搭建:Nginx_负载均衡_21

企业部分之lnmp环境的搭建:Nginx_nginx _22

网页重定向

企业部分之lnmp环境的搭建:Nginx_nginx _23

<body>

<noscript><metahttp-equiv="refresh"content="0;url=http://server2.example.com"></noscript>

<h1>Welcometo nginx!</h1>

这是web网页的写法,比网页重写快更加优化。

5虚拟主机

 server {

        listen       80;

        server_name www.westos.org;

        location / {

                root /www2;

                index index.html;

        }

    }

 

    server {

        listen       80;

        server_name www.linux.org;

        location / {

            root   /www2;

            index  index.html;

        }

    }

 

6负载均衡

 

企业部分之lnmp环境的搭建:Nginx_nginx _24

企业部分之lnmp环境的搭建:Nginx_nginx _25

企业部分之lnmp环境的搭建:Nginx_负载均衡_26

企业部分之lnmp环境的搭建:Nginx_负载均衡_27


http {

        upstream westos{

                server 172.25.99.2:80;

                server 172.25.99.3:80;

                server 127.0.0.1:80 backup;

        }

 

  server {

        listen       80;

        server_name www.westos.org;

        location / {

                proxy_pass http://westos;

        }

    }

 

    server {

        listen       80;

        server_name www.linux.org;

        location / {

            root   /www2;

            index  index.html;

        }

    }

企业部分之lnmp环境的搭建:Nginx_nginx _28

企业部分之lnmp环境的搭建:Nginx_负载均衡_29

企业部分之lnmp环境的搭建:Nginx_负载均衡_30