nginx安装升级及配置详解

nginx安装升级及配置详解
1.简介
2.安装配置
3.配置⽂件介绍
4.启动、停⽌、平滑重启、升级
剖布机⼀、Nginx简介
Nginx(engine x)是俄罗斯⼈Igor Sysoev编写的⼀款⾼性能的http和反向代理服务器。在连接⾼并发的情况下,nginx是apache服务器不错的替代品,它能够⽀持50000个并发连接数的响应,⽽内存、cpu等系统资源资源消耗却⾮常低,运⾏⾮常稳定。
性能优势:
作为web服务器,处理静态⽂件、索引⽂件及⾃动索引效率⾼
作为代理服务器,快速⾼效反向代理
作为负载均衡服务器
性能,⽀持多并发的连接,占⽤低内存
稳定,采⽤分段资源分配技术
⾼可⽤,⽀持热部署,启动迅速
其它特点:
成本低廉;
配置⽂件⾮常简单;
⽀持Rewrite重写规则,能够根据域名、URL的不同,将http请求分到不同的后端服务器组;
内置健康检查功能,如果nginx proxy后端的某台web服务器宕机了,不会影响到前端的访问;
节省带宽,⽀持gzip压缩;
⼆、Nginx安装与配置
编译安装
1.⾸先下载gcc编译器以及nginx⼀些模块的依赖库,通常有pcre库(⽀持rewrite模块),zlib(⽀持gzip模块)库,openssl(⽀持ssl模块)库等。这些库可以编译安装,也可以yum安装,这⾥选择yum安装。
# yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.然后选择nginx版本下载源码并解压
# tar –zxvf nginx-1.12. –C /PATH
3.使⽤configure脚本⾃动⽣成Makefile⽂件,nginx的configure脚本⽀持常⽤选项如下,但⾸先给出⼀个例⼦:
./configure --prefix=/usr/local/nginx \
--conf-path=/etc/f \
--error-log-path=/datadisk/data/log/nginx/error.log \
-
-http-log-path=/datadisk/data/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \水密电缆
--group=nginx \
--with-http_ssl_module \
-
-with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
-
-with-http_auth_request_module \
--with-threads --with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-file-aio \
--with-http_v2_module \
--with-ipv6
然后make && make install即可。
Nginx之configure选项
1. 通⽤配置项
--prefix=<path>:Nginx 安装的根路径,所有其他的路径都要依赖于该选项。
-
-sbin-path=<path>:指定 Nginx ⼆进制⽂件的路径。如果没有指定,那么这个路径会依赖于 --prefix 选项。
--conf-path=<path>:如果在命令⾏没有指定配置⽂件,那么将会通过这⾥指定路径,Nginx 将会去那⾥查它的配置⽂件。
--error-log-path=<path>:指定错误⽂件的路径,Nginx 将会往其中写⼊错误⽇志⽂件,除⾮有其他的配置。
--pid-path=<path>:指定的⽂件将会写⼊ Nginx master 进程的 pid,通常在 /var/run 下。
--lock-path=<path>:共享存储器互斥锁⽂件的路径。
--user=<user>:worker 进程运⾏的⽤户。
--group=<group>:worker 进程运⾏的组。
--with-file-aio:为 FreeBSD 4.3+ 和 Linux 2.6.22+ 系统启⽤异步 I/O。
--with-debug:这个选项⽤于启⽤调试⽇志。在⽣产环境的系统中不推荐使⽤该选项。
2. 配置优化选项
--with-cc=<path>:如果想设置⼀个不在默认 PATH 下的 C 编译器。
--with-cpp=<path>:设置 C 预处理器的相应路径.
--with-cc-opt=<options>:指定必要的 include ⽂件路径,可能 d(-I<path)指出,也可能是优化(-O4)和指定⼀个 64 位构建。
--with-ld-opt=<options>:包含连接器库的路径(-L<path>)和运⾏路径(-R<path>)
--with-cpu-opt=<cpu>:通过该选项为特定的 CPU 构建 Nginx。
3. mail 配置选项
--with-mail:该选项⽤于启⽤ mail 模块,该模块默认没有激活。
--with-mail_ssl_module:为了代理任何⼀种类型的使⽤ SSL/TLS 的 mail,激活该模块。
--without-mail_pop3_module:在启⽤ mail 模块后,单独地禁⽤ POP3 模块。
--without-mail_imap_module:在启⽤ mail 模块后,单独地禁⽤ IMAP 模块。
--without-mail_smtp_module:在启⽤ mail 模块后,单独地禁⽤ SMTP 模块。
--without-http:该选项将完全禁⽤ http 模块,如果你只想⽀持 mail,那么可以使⽤它。
对于典型的 mail 代理,可配置为如下:
./configure --with-mail --with-mail_ssl_module --with-openssl=${BUILD_DIR}/openssl-1.0.1p
对于邮件服务器来说,现在⼏乎每⼀个邮件服务器的安装都需要安装 SSL/TLS,并没没有⼀个邮件代理启⽤了预期功能的⽤户。推荐静态编译 OpenSSL,以便对操作系统中的OpenSSL 库没有依赖性。
4. http 配置选项
--without-http-cache:在使⽤ upstream 模块时,Nginx 能够配置本地缓存内容。这个选项能够禁⽤缓存。
--with-http_perl_module:Nginx 配置能够扩展使⽤ Perl 代码。这个选项启⽤这个模块(然⽽使⽤这个模块会降低性能)。
--with-perl_modules_path=<path>:对于额外嵌⼊的 Perl 模块,使⽤该选项指定该 Perl 解析器的路径。也可以通过配置选项来指定 Perl 模块解析器的位置。
--with-perl=<path>:如果在默认的路径中没有到 Perl,那么指定 Perl(5.6 版本以上)的路径。
--http-client-body-temp-path=<path>:从客户端收到请求后,该选项设置的⽬录⽤于作为请求体临时存放的⽬录。如果 WebDAV 模块启⽤,那么推荐设置该路径为同⼀个⽂件系统上的⽬录作为最终的⽬的地。
--http-proxy-temp-path=<path>:在使⽤代理后,通过该选项设置存放临时⽂件路径。
--http-fastcgi-temp-path=<path>:设置 FastCGI 临时⽂件的⽬录。
--http-uwsgi-temp-path=<path>:设置 uWSGI 临时⽂件的⽬录。
--http-scgi-temp-path=<path>:设置 SCGI 临时⽂件的⽬录。
--with-http_ssl_module:如果需要对流量进⾏加密,那么可以使⽤这个选项,在 URLs 中开始部分将会是 https(需要 OpenSSL)。
--with-http_realip_module:如果你的 Nginx 在七层负载均衡器或者是其他设备之后,它们将 Http 头中的客户端 IP 地址传递,那么你将会需要启⽤这个模块。在多个客户处于⼀个 IP 地址下使⽤。
-
-with-http_addition_module:这个模块作为⼀个输出过滤器,使你能够在请求经过⼀个 location 前或者后时在该 location 本⾝添加内容。
--with-http_xslt_module:该模块⽤于 XML 响应转换,基于⼀个或者多个 XSLT 格式(需要 libxml2 和 libxslt 库)。
--with-http_image_filter_module:该模块被作为图像过滤器使⽤,在将图像投递到客户之前进⾏处理(需要 libgd 库)。
--with-http_geoip_module:使⽤该模块,能够设置各种变量以便在配置⽂件中的区段使⽤,基于地理位置查客户端 IP 地址(需要 MaxMfind GeoIP 库和相应的预编译数据库⽂件)。
--with-http_sub_module:该模块实现了替代过滤,在响应中⽤⼀个字符串替代另⼀个字符串。
--with-http_dav_module:启⽤这个模块将激活使⽤ WebDAV 的配置指令。请注意,这个模块也只在有需要使⽤的基础上启⽤,如果配置不正确,它可能带来安全问题。
--with-http_flv_module:如果需要提供 Flash 流媒体视频⽂件,那么该模块将会提供伪流媒体。
--with-http_mp4_module:这个模块⽀持 H.264/AAC ⽂件伪流媒体。
--with-http_gzip_static_module:当被调⽤的资源没有 .gz 结尾格式的⽂件时,如果想⽀持发送预压缩版本的静态⽂件,那么使⽤该模块。
--with-http_gunzip_module:对于不⽀持 gzip 编码的客户,该模块⽤于为客户解压缩预压缩内容。
--with-http_random_index_module:如果你想提供从⼀个⽬录中随机选择⽂件的索引⽂件,那么这个模块需要被激活。
--with-http_secure_link_module:该模块提供了⼀种机制,它会将⼀个哈希值链接到⼀个 URL 中,因此,只有那些使⽤正确的密码能够计算链接。
--with-http_stub_status_module:启⽤这个模块后会收集 Nginx ⾃⾝的状态信息。输出的状态信息可以使⽤ RRDtool 或类似的东西来绘制成图。
对于⽹络加速/代理,可如下配置:
./configure --with-http_ssl_module --with-http_realip_module --with-http_geoip_module --with-http_stub_status_module --with-openssl=${BUILD_DIR}/openssl-1.0.1c
对于 Web 服务器:
./configure --with-http_stub_status_module
这两个配置不同之处在于它们⾯对的客户,处于 Web 加速时,会考虑到 SSL 请求的终结,也包括处理代理客户和基于客户来源决策。处于 Web 服务时,则仅需要提供默认⽂件访问能⼒。
5. 禁⽤的配置选项
--without-http_charset_module:该字符集模块负责设置 Content-Type 响应头,以及从⼀个字符集转换到另⼀个字符集。
跟刀架
--without-http_gzip_module:gzip 模块作为⼀个输出过滤器,在将内容投递到客户时对内容进⾏压缩。
--without-http_ssi_module:该模块是⼀个过滤器,⽤于处理 SSI 包含。如果启⽤ Perl 模块,那么额外的 SSI 指令(perl)可⽤。
夹心取力器
--without-http_userid_module:userid 模块能够使得 Nginx 设置 cookies,⽤于客户标识。变量 $uid_set 和 $uid_got 可以记录⽤户跟踪。
--without-http_access_module:access 模块基于 IP 控制访问 location。
led天花灯电源
--without-http_auth-basic_module:该模块通过 Http 基本⾝份验证限制访问。
--without-http_autoindex_module:如果⼀个⽬录中没有 index ⽂件,那么 autoindex 模块收集这个⽬录列出⽂件。
--without-http_geo_module:该模块能够让你基于客户端 IP 地址设置配置变量,然后根据这些变量的值采取⾏动。
--without-http_map_module:map 模块能够让你映射⼀个变量到另⼀个变量。
--without-http_split_clients_module:该模块创建⽤于 A/B 测试的变量。
--without-http_referer_module:该模块能够让 Nginx 阻⽌基于 Referer Http 头的请求。
--without-http_rewrite_module:通过 rewrite 模块能够让你基于变量条件改变 URI。
--without-http_proxy_module:使⽤ proxy 模块允许 Nginx 将请求传递到其他服务器或者服务器组。
--without-http_fastcgi_module:FastCGI 模块能够让 Nginx 将请求传递到 FastCGI 服务器。
--without-http_uwsgi_module:这个模块能够使得 Nginx 将请求传递到 uWSGI 服务器。
--without-http_scgi_module:SCGI 模块能够让 Nginx 将请求传递到 SCGI 服务器。
--without-http_memcached_module:该模块能够使得 Nginx 与⼀个 memcached 服务器进⾏交互,将响应放置到变量查询中。
--without-http_limit_conn_module:该模块能够使得 Nginx 基于某些键,通常是 IP 地址,设置连接限制。
--without-http_limit_req_module:通过该模块,Nginx 能够限制每个⽤户的请求率。
--without-http_empty_gif_module:在内存中产⽣⼀个 1 像素 * 1 像素的透明 GIF 图像。
--without-http_browser_module:browser 模块允许基于 User-Agent Http 请求头配置,变量的设置基于在该头中发现的版本。
--without-http_upstream_ip_hash_module:该模块定义了⼀组可以与不同的代理模块结合使⽤的服务器。
三、nginx配置⽂件详解
…                    #全局快
events                #events块
{
}
http                  #http块
{
…                #http全局块
server            #server块
  {
…                #server全局块
location      #location块
{
      }
  }
}
如果某指令在不同层级的块中出现,则采⽤"就近原则",以较低级的块配置为准。
⾸先看看各个块的作⽤
1. 全局块。是默认配置⽂件从开始到events块之间的⼀部分内容,主要设置⼀些影响nginx服务器整体运⾏的配置命令,也就是全局配置。通常包括配置运⾏nginx服务器的⽤
户(组),worker process数,pid存放路径,⽇志路径及配置⽂件引⼊等等。
2. events块。主要设置影响nginx服务器与⽤户的⽹络连接,对服务器性能影响很⼤。常⽤的是设置是否开启对多worker process下的⽹络连接序列化,是否允许同时接受多
个⽹络连接,选取事件驱动模型,每个worker process最⼤连接数等。
3. http块。可以包含server块的配置,主要配置代理、缓存和⽇志等和第三⽅模块。http全局块中配置的指令包括⽂件引⼊、mime-type定义、⽇志定义、连接超时时间和单连
接请求数上限等。
4. server块。每个server块就相当于⼀个虚拟主机。server块中常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或者ip配置。
5. location块。location块其实是server块中的⼀个指令。此块的主要功能是,基于nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进⾏匹配,对特定的请
求进⾏处理。地址定向、数据缓存和应答控制等,第三⽅模块也是在这块中配置。
防水微动开关Nginx配置⽂件f简单介绍
1 #Nginx运⾏的⽤户和⽤户组
2 #user nobody; #默认
3 user nginx nginx; #user user[group];
4
5#nginx进程数,⼀般为CPU总核⼼数
6 worker_processes 8; #worker_processes number|auto;
7
8
9 #全局错误⽇志定义类型,[ debug | info | notice | warn | error | crit ] 设置某⼀级别后,⽐这⼀级别⾼的⽇志也会被记录
10
11 error_log /usr/local/nginx/logs/error.log info;
12
13
14
15 #进程pid⽂件
16 pid /usr/local/nginx/logs/nginx.pid;
17
18
19
20 #配置⽂件的引⼊,⽀持相对路径
21 include conf.d/*.conf;            #include file;
22
23 events
24
25 {
26
27    #对多个nginx进程接受连接进⾏序列化,防⽌惊问题。
28    accept_mutex on | off;
29
30
31    #事件驱动模型选择,后续再说。
32    use epoll;
33
34
35    #单个进程最⼤连接数,尽量⼤。理论上每台nginx服务器的最⼤连接数为65535。
36    worker_connections 65535;
37
38 }
39
40
41 http{
42
43    #⽂件扩展名与⽂件类型映射表。常⽤浏览器中可现实内容有html、xml、gif和flash等繁多资源,就需要使⽤到mime type,nginx作为web服务器,就需要识别前端请求的资源类型。此处定义了⼀个types结构,结构中包含了浏览器能够识别的m
44
45    pes;
46
47    #默认⽂件类型
48    default_type application/octet-stream;
49
50
51    #对服务⽇志的格式、⼤⼩、输出等配置,需要⽤到log_format和access_log。此语法格式为log_format name string ...; nginx预设的⼀些内置变量获取相关内容,string整体使⽤单括号括起来。
52
53    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
54    '$status $body_bytes_sent "$http_referer" '
55    '"$http_user_agent" "$http_x_forwarded_for"';
56
57    #access_log path[format[buffer=size]],main就是上⾯格式的名称。
58    access_log logs/access.log main;
59
60
61
62 #⽇志格式设定
63 #$remote_addr与$http_x_forwarded_for⽤以记录客户端的ip地址;
64 #$remote_user:⽤来记录客户端⽤户名称;
65 #$time_local:⽤来记录访问时间与时区;
66 #$request:⽤来记录请求的url与http协议;
67 #$status:⽤来记录请求状态;成功是200,
68 #$body_bytes_sent :记录发送给客户端⽂件主体内容⼤⼩;
69 #$http_referer:⽤来记录从那个页⾯链接访问过来的;
70 #$http_user_agent:记录客户浏览器的相关信息;
71
72 #通常web服务器放在反向代理的后⾯,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,⽤以记录原有客户端的IP地址和
73
74
75 #开启⾼效⽂件传输模式,sendfile指令指定nginx是否调⽤sendfile函数来输出⽂件,对于普通应⽤
设为 on,如果⽤来进⾏下载等应⽤磁盘IO重负载应⽤,可设置为off,以平衡磁盘与⽹络I/O处理速度,降低系统的负载。注意:如果图⽚显⽰不正常
76 sendfile on;
77
78 #此选项允许或禁⽌使⽤socke的TCP_CORK的选项,此选项仅在使⽤sendfile的时候使⽤
79 tcp_nopush on;
80 tcp_nodelay on;
81
82 #连接超时时间,单位秒
83 keepalive_timeout 120; #keepalive_timeout timeout[header_timeout];
84
85 #开启gzip压缩输出
86 gzip on;
87
88
89 #基于名称的虚拟主机的配置
90 server{
91    listen 80;
92
93    #域名可以有多个,⽤空格隔开,name中还可使⽤正则表达式,波浪号~作为正则表达式开始的标记
94    server_name www.server myserver;
95
96
97    #配置location块。语法为location [ = | ~ | ~* | ^~ ] uri {…}
98 其中,uri是待匹配的请求字符串,不含正则的uri为标准uri,含正则的uri为正则uri。
99
100    #"=",⽤于标准uri前,要求请求字符串与uri严格匹配。如果匹配成功就停⽌继续向下搜索并⽴即处理此请求。
101
102    #"~",⽤于表⽰正则uri,区分⼤⼩写
103
104    #"~*",⽤于表⽰正则uri,不区分⼤⼩写
105
106    location / {
107
108    #配置请求的根⽬录及默认⾸页
109    root /data/www;
110    index index.html index.htm index.php;
111
112
113    #location的uri还可以通过alias更改,下⾯的location块接收到/data/index.html时,匹配成功,通过alias服务器将到/locationtest/other到index.html响应请求。
114
115    location ~ ^/data/(\.+\.(html|htm))$ {
116        alias /locationtest/other/$1;
117    }
118
119
120   #基于ip配置nginx的访问权限,deny禁⽌,allow允许,下⾯的禁⽌192.168.1.1⽽192.168.1.0/24的客户端是可以访问的。因为是按顺序进⾏访问权限的检查。遇到匹配的,停⽌向下搜索相关配置。
121    location ~ /\.ht {
122       deny 192.168.1.1;
123       allow 192.168.1.0/24;
124       deny all;
125    }
126
127    #设置⽹站的错误页⾯,语法为error_page code ...[=[response]] uri
128    error_page 500 502 503 504 /50x.html;
129     location = /50x.html {
130     root html;
131    }
132
133    }
134
135 }
136 }
四、启动、停⽌、平滑重启、升级
Nginx的信号控制
TERM,INT 快速关闭
QUIT 从容关闭(处理完当前请求关闭进程)
HUP 平滑重启,重新加载配置⽂件(此操作不会中断⽤户的访问请求)
USER1 重新打开⽇志⽂件,在切割⽇志时⽤途较⼤
USR2 平滑升级可执⾏程序
WINCH 从容关闭⼯作进程
启动
systemctl start nginx
若⽆法启动,则执⾏以下命令 /usr/sbin/nginx -c /etc/f
参数"-c"指定了配置⽂件的路径,如不加,则默认加载安装⽬录的conf⼦⽬录中的f⽂件
停⽌
 Nginx主进程号可通过cat /run/nginx.pid 或者 ps –ef | grep nginx 查看。worker process 表⽰它们为⼦进程。3426为主进程。
从容停⽌
kill –QUIT nginx主进程号
或者kill –QUIT 'ps -ef | grep "nginx: master" | grep -v "grep" | awk -F ' ' '{print $2}''
快速停⽌
kill –TERM 主进程号
kill –INT 主进程号
强制停⽌
pkill -9 nginx 主进程号
平滑重启
  如果改变了nginx的配置⽂件,想重启nginx,同样可以通过发送系统信号给nginx主进程的⽅式来进⾏。不过在重启之前要确认配置⽂件语法是否正确,否则nginx不会加载新的配置⽂件。可通过以下命令来判断nginx配置⽂件是否正确。
/usr/sbin/nginx -t -c /etc/f
错误则显⽰如下:
正确则显⽰如下:
此时可平滑重启nginx了
Kill –HUP nginx主进程号
当Nginx接受到HUP信号时,它会尝试先解析配置⽂件,如果成功,就应⽤新的配置⽂件。之后,nginx运⾏新的⼯作进程并从容关闭旧的⼯作进程。通知⼯作进程关闭监听套接字,但继续为当前连接的客户提供服务。所有客户端服务完成后,旧的⼯作进程被关闭。

本文发布于:2024-09-21 13:48:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/159210.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:配置   模块   能够   请求
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议