Nginx简介
Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务
Nginx工作原理
Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个location block(location是用于URL匹配的命令),location配置的命令会启动不同模块完成工作。
Nginx模块分为核心模块,基础模块和第三方模块。
核心模块:HTTP模块、EVENT模块(事件)、MAIL模块。
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块、HTTP Rewrite模块。
第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块。
性能优势
web服务器,处理静态文件、索引文件以及自动索引效率高。
代理服务器,快速高效反向代理,提升网站性能。
负载均衡器,内部支持Rails和PHP,也可支持HTTP代理服务器,对外进行服务。同时支持简单容错和利用算法进行负载均衡。
性能方面,Nginx专门为性能设计,实现注重效率。采用Poll模型,可以支持更多的并发连接,并在大并发时占用很低内存。
稳定性方面,采用分阶段资源分配技术,使CPU资源占用率低。
高可用性方面,支持热备,启动迅速。
Nginx编译安装,配置文件详解
Nginx安装
安装部署nginx所用到的安装工具和相关库
默认安装的http_rewrite_module(使用正则对请求重写)需pcre库
默认安装的httP_gzip_module(Gzip压缩)需zlib库
安装http_ssl_module(HTTPS/SLL)需openssl库1
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载nginx源码包,并解压1
2
3wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
设置参数 参数具体参考《Nginx编译参数》1
2
3./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module
编译并安装1
2make && make install
#### Nginx配置文件(/usr/local/nginx/conf/nginx.conf)
配置文件主要由四部分组成:main(全区设置),server(主机配置),upstream(负载均衡服务器设置),和location(URL匹配特定位置设置)。
全局变量
#Nginx的worker进程运行用户以及用户组
#user nobody nobody;
#Nginx开启的进程数
worker_processes 1;
#worker_processes auto;
#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。
eg:
#worker_processes 4 #4核CPU
#worker_cpu_affinity 0001 0010 0100 1000
#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
#error_log logs/error.log info;
#指定进程ID存储文件位置
#pid logs/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
#vim /etc/security/limits.conf
- soft nproc 65535
- hard nproc 65535
- soft nofile 65535
- hard nofile 65535
worker_rlimit_nofile 65535;事件配置
1
2
3
4
5
6
7
8
9events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。理论值:worker_rlimit_nofile/worker_processes
#注意:最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处
worker_connections 65535;
#worker工作方式:串行(一定程度降低负载,但服务器吞吐量大时,关闭使用并行方式)
#multi_accept on;
}
http参数
文件扩展名与文件类型映射表1
#include mime.types;
默认文件类型1
#default_type application/octet-stream;
日志相关定义
1 | #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
FastCGI相关参数
1 | fastcgi_connect_timeout 300; |
gzip模块设置
1 | #开启gzip压缩输出 |
虚拟主机基本设置
虚拟主机定义
1 | server { |
错误信息返回页面
1 | #error_page 404 /404.html; |
访问URL以
1 | # proxy the PHP scripts to Apache listening on 127.0.0.1:80 |
php脚本请求全部转发给FastCGI处理
1 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 |
禁止访问
1 | # deny access to .htaccess files, if Apache's document root |
HTTPS虚拟主机定义
1 | # HTTPS server |
Nignx状态监控
1 | #Nginx运行状态,StubStatus模块获取Nginx自启动的工作状态(编译时要开启对应功能) |
反向代理
#以下配置追加在HTTP的全局变量中
#nginx跟后端服务器连接超时时间(代理连接超时)1
proxy_connect_timeout 5;
#后端服务器数据回传时间(代理发送超时)1
proxy_send_timeout 5;
#连接成功后,后端服务器响应时间(代理接收超时)1
proxy_read_timeout 60;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小1
2
3proxy_buffer_size 16k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)1
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传1
proxy_temp_file_write_size 64k;
#反向代理缓存目录1
2
3
4
5
6
7
8proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
#levels=1:2 设置目录深度,第一层目录是1个字符,第2层是2个字符
#keys_zone:设置web缓存名称和内存缓存空间大小
#inactive:自动清除缓存文件时间。
#max_size:硬盘空间最大可使用值。
#指定临时缓存文件的存储路径(路径需和上面路径在同一分区)
proxy_temp_path
/data/proxy/temp
服务配置
1 | server { |
负载均衡
负载均衡服务器池
1 | upstream my_server_pool { |
负载均衡调用
1 | server { |
URL重写
#根据不同的浏览器URL重写1
2
3
4
5
6if($http_user_agent ~ Firefox){
rewrite ^(.*)$ /firefox/$1 break;
}
if($http_user_agent ~ MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
实现域名跳转
location / {
rewrite ^/(.*)$ https://web8.example.com$1 permanent;
}
IP限制
#限制IP访问1
2
3
4
5
6location / {
deny 192.168.0.2;
allow 192.168.0.0/24;
allow 192.168.1.1;
deny all;
}
Nginx相关命令
#启动nginx
nginx
#关闭nginx
nginx -s stop
#平滑重启
kill -HUP cat /usr/local/nginx/logs/nginx.pid
nginx.conf中文详解
1 | #定义Nginx运行的用户和用户组 |
参考
http://blog.csdn.net/hzsunshine/article/details/63687054
https://www.cnblogs.com/hunttown/p/5759959.html