第三十五节、Nginx服务详解

一、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/*
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容