Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由俄罗斯的程序设计师IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强。在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如京东、新浪、网易、腾讯、淘宝等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。
Nginx工作模式(转)
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于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
vim nginx.h
如图做修改。去掉版本号。
./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
出现如下图错误提示
[root@server1 nginx-1.10.1]# yum install pcre-devel -y
出现如下图错误
[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
[root@server1sbin]# curl -I localhost
开机自启动
[root@server1~]# vim /etc/rc.local
添加软连接
[root@server1~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
网页测试
自动监控模块
location/status {
stub_status on;
access_log off;
}
2加载动态模块
3修改/usr/local/lnmp/nginx/conf/nginx.conf优化nginx功能
[root@server1~]# ps aux
[root@server1~]# lscpu
[root@server1~]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[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
Shell ×××(将cpu内存全部占满)
[root@server1~]# :(){ :|:& };:
如果按下面方法限制用户使用的进程数量,会避免shell×××把内存占满而卡死
[root@server1~]# vim /etc/security/limits.conf
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
出现如下图
对应位置写入相关内容:
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
加入网页重写
[root@server1certs]# nginx -t
[root@server1certs]# nginx -s reload
完成http https之间的转换。
网页测试
网页重定向
<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负载均衡
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;
}
}