一、nginx服务简介
主要功能:
- HTTP(WEB)服务器
- 反向代理服务器(外网访问内网)
- 邮件代理服务器
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx相对于Apache优点:
1)高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
2)反向代理性能非常好。(可用于负载均衡)
3)内存和cpu占用率低。(为Apache的1/5-1/10)
4)功能较Apache少(常用功能均有)
5)对php可使用cgi方式和fastcgi方式。
二、服务的安装配置
首先需要安装pcre库,然后再安装Nginx,安装pcre支持rewrite库,也可以安装源码,注*安装源码时,指定pcre路径为解压源码的路径,而不是编译后的路径,否则会报错,报错信息(make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误)
安装pcre库yum install pcre-devel pcre -y
去官网http://nginx.org/下载当期使用的稳定版(Stable version)
下载完成后解压并安装nginx,先创建nginx系统用户
[root@localhost ~]# groupadd nginx
[root@localhost ~]# useradd -r -g nginx nginx
[root@localhost ~]# usermod -s /sbin/nologin nginx
[root@localhost ~]# cd /usr/src
[root@localhost src]# tar -zxf nginx-1.12.2.tar.gz
[root@localhost src]# cd nginx-1.12.2
[root@localhost nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module&&make&&make install
#--with-http_stub_status_module 查看nginx访问状态
#--with-http_ssl_module 支持https加密访问
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/
[root@localhost nginx]# ll
总用量 16
drwxr-xr-x 2 root root 4096 12月 28 22:33 conf #配置文件目录
drwxr-xr-x 2 root root 4096 12月 28 22:33 html #网站发布目录
drwxr-xr-x 2 root root 4096 12月 28 22:33 logs #日志文件目录
drwxr-xr-x 2 root root 4096 12月 28 22:33 sbin #nginx操作命令目录
编译安装包错
#报错信息如下
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
原因:openssl库不全,解决如下:
[root@localhost nginx-1.12.2]# yum install openssl openssl-devel -y
检查配置文件并启动服务查看进程及端口号
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost nginx]# /usr/local/nginx/sbin/nginx
#查看服务进程及端口号默认80
[root@localhost nginx]# ps -ef|grep nginx
root 14987 1 0 22:35 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 14988 14987 0 22:35 ? 00:00:00 nginx: worker process
root 14990 11243 0 22:36 pts/0 00:00:00 grep nginx
[root@localhost nginx]# netstat -ntpl|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14987/nginx
#平滑重启nginx(重新加载配置文件)
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s reload
#关闭Nginx服务
[root@localhost nginx]# pkill nginx
[root@localhost nginx]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
三、修改配置文件
首先备份配置文件然后删除注释语句重新生成配置文件
[root@localhost conf]# cp nginx.conf nginx.conf.bak
[root@localhost conf]# vim nginx.conf
1 ########nginx conf#########
2 user nginx nginx; #服务的所有者及所属组
3 worker_processes 2; #开启工作进程数一般和CPU核数相等
4 #error_log logs/error.log;
5 #error_log logs/error.log notice;
6 #error_log logs/error.log info;
7 #pid logs/nginx.pid; #nginx服务pid号读取位置
8 events {
9 worker_connections 1024; #每个进程最大支持的并发线程数
10 }
11 http {
12 include mime.types;
13 default_type application/octet-stream;
14 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
15 # '$status $body_bytes_sent "$http_referer" '
16 # '"$http_user_agent" "$http_x_forwarded_for"';
17 #access_log logs/access.log main;
18 sendfile on;
19 #tcp_nopush on;
20 #keepalive_timeout 0;
21 keepalive_timeout 65;
22 #gzip on;
23 server {
24 listen 80; #服务监听的端口号80
25 server_name localhost; #监听本机IP
28 location / { #网站根目录
29 root html; #发布目录
30 index index.html index.htm; #默认引导页
31 }
38 }
39 }
报错信息
修改配置文件后重新加载nginx报错信息如下
[root@localhost logs]# /usr/local/nginx/sbin/nginx -s reload
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
原因:之前pkill过nginx进程导致pid丢失,此时可以直接启动nginx或者用c参数重新指定配置文件
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@localhost conf]# /usr/local/nginx/sbin/nginx -s reload
配置虚拟主机
直接复制配置文件中server字段并修改相应的参数
server {
listen 80;
server_name www.jf2.com;
location / {
root /data/nginx/html/jf2;
index index.html index.htm index.php;
}
一般企业中为了方便管理,直接在nginx安装目录下新建一个虚拟主机目录,里面每台虚拟主机单独建立一个配置文件,然后由nginx主配置文件直接引用该目录
[root@localhost conf]# mkdir -p /usr/local/nginx/vhosts
[root@localhost conf]# cd /usr/local/nginx/vhosts/
#创建不同网站同名的文件分别写入主机信息
#主配置文件删除server段代码然后引用配置文件目录下所有文件
11 http {
12 include mime.types;
13 default_type application/octet-stream;
14 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
15 # '$status $body_bytes_sent "$http_referer" '
16 # '"$http_user_agent" "$http_x_forwarded_for"';
17 #access_log logs/access.log main;
18 sendfile on;
19 #tcp_nopush on;
20 #keepalive_timeout 0;
21 keepalive_timeout 65;
22 #gzip on;
28 include vhosts/*;
Nginx服务升级方法
- 第一步下载新版本的源码安装包
- 第二步获取旧版本的编译参数
[root@localhost logs]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
- 第三步解压新的源码包,预编译并安装(没有make intsall第三步)
- 第四步将nginx目录下sbin目录的nginx启动文件重命名备份,并从新的源码包解压目录拷贝启动文件
[root@localhost logs]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
[root@localhost logs]# cp /usr/src/nginx-1.12.2/objs/nginx /usr/loca/nginx/sbin/
- 第五步检查配置文件并重载nginx服务
降级办法类似也是编译旧的源码包,并恢复旧的启动文件
nginx配置文件
nginx配置文件每行的代码都是以分号;
结束
#定义Nginx运行的用户和用户组
user www www;
#启动进程,通常设置成和cpu的数量相等
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_rlimit_nofile 102400;
#这个指令是指当一个nginx进程打开的最多文件描述符数目
#全局错误日志带级别及PID文件
error_log /usr/local/nginx/logs/error.log warn;
#错误日志定义等级,[ debug | info | notice | warn | error | crit ]
pid /usr/local/nginx/logs/nginx.pid;
#工作模式及连接数上限
events {
use epoll;
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 102400;
#单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
multi_accept on;
#尽可能多的接受请求
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /usr/local/nginx/log/nginx/access.log;
sendfile on;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
#autoindex on; #开启目录列表访问,下载服务器需要打开,默认关闭。
tcp_nopush on; #防止网络阻塞
keepalive_timeout 60;
#keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后,继请求时,keepalive-timeout功能可避免建立或重新建立连接。
tcp_nodelay on; #提高数据的实时响应性
#开启gzip压缩
gzip on;
gzip_min_length 1k;
#1k以下文件不压缩
gzip_buffers 4 16k;
#gzip压缩缓存
gzip_http_version 1.1;
#gzip版本信息
gzip_comp_level 2;
#压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快.值越大,消耗CPU比较高.一般企业中配置为4或6
gzip_types text/plain application/x-javascript text/css application/xml;
#设置需要压缩文件的类型
gzip_vary on;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
#设定请求缓冲
large_client_header_buffers 4 4k;
client_header_buffer_size 4k;
#客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k
#不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
#这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive
#包含其它配置文件,如自定义的虚拟主机
include vhosts.conf;
nginx负载均衡配置
#首先在nginx.conf主配置文件中设置负载均衡(起名字)
#定义一个负载均衡设置名字,并配置均衡的主机,weight配置权重,在fail_timeout内检查max_fails次数,失败则剔除均衡
upstream linux_web {
server 192.168.10.15:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.10.16:8080 weight=1 max_fails=2 fail_timeout=30s;
}
#在虚拟主机的server段里面的location段将请求指向负载均衡
location /
{
proxy_pass http://linux_web; #proxy_pass转发模块将请求转发给linux_web,就是在主配置文件中设置好的负载均衡
proxy_http_version 1.1;
proxy_set_header Connection "";
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负载均衡及虚拟主机server都配置在单个的文件中由主文件统一引用,主配置文件引用时用相对路径,如网站域名目录是/usr/local/nginx/conf/domain/,那引用直接include conf/domain/*