1. 安装nginx1.1 选择稳固 版本
我们编译安装nginx来定制本身 的模块 ,呆板 CentOS 6.2 x86_64 。起首 安装缺少的依靠 包:
1
# yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
这些软件包假如 yum上没有的话可以下载源码来编译安装,只是要留意 编译时默认安装的目次 ,确保下面在安装nginx时可以或许 找到这些动态库文件(ldconfig)。
从 https://nginx.org/en/download.html下载稳固 版nginx-1.6.3.tar.gz到/usr/local/src下解压。
为了后续预备 我们别的 下载2个插件模块:nginx_upstream_check_module-0.3.0.tar.gz—— 查抄 后端服务器的状态 ,nginx-goodies-nginx-sticky-module-ng-bd312d586752.tar.gz(发起 在/usr/local/src下解压后将目次 重定名 为nginx-sticky-module-ng-1.2.5) —— 后端做负载均衡 办理 session sticky题目 (与upstream_check模块连合 利用 必要 别的 打补丁,请参考nginx负载均衡 设置 实战) 。
请留意 插件与nginx的版本兼容题目 ,一样平常 插件越新越好 ,nginx不消 追新,稳固 第一。nginx-1.4.7,nginx-sticky-module-1.1,nginx_upstream_check_module-0.2.0 ,这个搭配也没题目 。sticky-1.1与nginx-1.6版本由于更新没跟上编译堕落 。(可以直接利用 Tengine,默认就包罗 了这些模块)
1
2
3
4
5
6
7
8
[root@cachets nginx-1.6.3]# pwd
/usr/local/src/nginx-1.6.3
[root@cachets nginx-1.6.3]# ./configure --prefix=/usr/local/nginx-1.6 --with-pcre \
--with-http_stub_status_module --with-http_ssl_module \
--with-http_gzip_static_module --with-http_realip_module \
--add-module=../nginx_upstream_check_module-0.3.0
[root@cachets nginx-1.6.3]# make make install
1.2 常用编译选项阐明
nginx大部分 常用模块,编译时./configure --help以--without开头的都默认安装。
--prefix=PATH : 指定nginx的安装目次 。默认 /usr/local/nginx
--conf-path=PATH : 设置nginx.conf设置 文件的路径。nginx答应 利用 差别 的设置 文件启动 ,通过下令 行中的-c选项 。默以为 prefix/conf/nginx.conf
--user=name: 设置nginx工作进程 的用户。安装完成后,可以随时在nginx.conf设置 文件更改user指令。默认的用户名是nobody 。--group=name雷同
--with-pcre : 设置PCRE库的源码路径,假如 已通过yum方式安装 ,利用 --with-pcre主动 找到库文件。利用 --with-pcre=PATH时,必要 从PCRE网站下载pcre库的源码(版本4.4 – 8.30)并解压,剩下的就交给Nginx的./configure和make来完成。perl正则表达式利用 在location指令和 ngx_http_rewrite_module模块中 。
--with-zlib=PATH : 指定 zlib(版本1.1.3 – 1.2.5)的源码解压目次 。在默认就启用的网络传输压缩模块ngx_http_gzip_module时必要 利用 zlib 。
--with-http_ssl_module : 利用 https协议模块 。默认环境 下 ,该模块没有被构建。条件 是openssl与openssl-devel已安装
--with-http_stub_status_module : 用来监控 Nginx 的当前状态
--with-http_realip_module : 通过这个模块答应 我们改变客户端哀求 头中客户端IP地点 值(比方 X-Real-IP 或 X-Forwarded-For),意义在于可以或许 使得背景 服务器记录 原始客户端的IP地点
--add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新参加 module时无需重新编译)
再提供一种编译方案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
./configure\
--prefix=/usr\
--sbin-path=/usr/sbin/nginx\
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/\
--http-proxy-temp-path=/var/tmp/nginx/proxy/\
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/\
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi\
--with-pcre=../pcre-7.8
--with-zlib=../zlib-1.2.3
1.3 启动关闭nginx
1
2
3
4
5
6
7
8
9
10
11
12
## 查抄 设置 文件是否精确
# /usr/local/nginx-1.6/sbin/nginx -t
# ./sbin/nginx -V # 可以看到编译选项
## 启动 、关闭
# ./sbin/nginx # 默认设置 文件 conf/nginx.conf ,-c 指定
# ./sbin/nginx -s stop
或 pkill nginx
## 重启,不会改变启动时指定的设置 文件
# ./sbin/nginx -s reload
或 kill -HUP `cat /usr/local/nginx-1.6/logs/nginx.pid`
固然 也可以将 nginx 作为体系 服务管理,下载 nginx到/etc/init.d/,修改内里 的路径然后赋予可实行 权限 。
1
# service nginx {start|stop|status|restart|reload|configtest}
1.4 yum安装
—— 2015-05-22更新
yum安装rpm包会比编译安装简单 很多 ,默认会安装很多 模块,但缺点是假如 你想以后安装第三方模块那就没办法了。
1
2
3
4
5
6
# vi /etc/yum.repo.d/nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
剩下的就yum install nginx搞定,也可以yum install nginx-1.6.3安装指定版本(条件 是你去packages里看到有对应的版本 ,默认是最新版稳固 版)。
2. nginx.conf设置 文件
Nginx设置 文件重要 分成四部分 :main(全局设置)、server(主机设置)、upstream(上游服务器设置,重要 为反向署理 、负载均衡 相干 设置 )和 location(URL匹配特定位置后的设置),每部分 包罗 多少 个指令。main部分 设置的指令将影响别的 全部 部分 的设置;server部分 的指令重要 用于指定假造 主机域名、IP和端口;upstream的指令用于设置一系列的后端服务器 ,设置反向署理 及后端服务器的负载均衡 ;location部分 用于匹配网页位置(比如 ,根目次 “/ ”,“/images”,等等) 。他们之间的关系式:server继承 main,location继承 server;upstream既不会继承 指令也不会被继承 。它有本身 的特别 指令 ,不必要 在其他地方的应用。
当前nginx支持的几个指令上下文:
2.1 通用
下面的nginx.conf简单 的实现nginx在前端做反向署理 服务器的例子,处理 惩罚 js、png等静态文件,jsp等动态哀求 转发到别的 服务器tomcat:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
user www www;
worker_processes 2;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# gzip压缩功能设置
gzipon;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/htmltext/plaintext/csstext/javaapplication/jsonapplication/javaapplication/x-javaapplication/xml;
gzip_vary on;
# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp1 2;
# 设定负载均衡 背景 服务器列表
upstream backend {
#ip_hash;
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
}
# 很紧张 的假造 主机设置
server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;
charset utf-8;
access_log logs/host.access.log main;
#对 / 全部 做负载均衡 +反向署理
location / {
root /apps/oaapp;
index index.jsp index.html index.htm;
proxy_pass https://backend;
proxy_redirect off;
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
#静态文件 ,nginx本身 处理 惩罚 ,不去backend哀求 tomcat
location ~* /download/{
root /apps/oa/fs;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /apps/oaapp;
expires 7d;
}
location /nginx_status{
stub_status on;
access_log off;
allow 192.168.10.0/24;
deny all;
}
location ~ ^/(WEB-INF)/ {
deny all;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
## 别的 假造 主机,server 指令开始
}
2.2 常用指令阐明 2.2.1 main全局设置
nginx在运行时与具体 业务功能(比如 http服务大概 email服务署理 )无关的一些参数,比如 工作进程 数 ,运行的身份等 。
woker_processes 2
在设置 文件的顶级main部分 ,worker脚色 的工作进程 的个数,master进程 是吸取 并分配哀求 给worker处理 惩罚 。这个数值简单 一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l ,也是 auto 值,假如 开启了ssl和gzip更应该设置成与逻辑CPU数量 一样乃至 为2倍,可以镌汰 I/O操纵 。假如 nginx服务器尚有 别的 服务 ,可以思量 得当 镌汰 。
worker_cpu_affinity
也是写在main部分 。在高并发环境 下,通过设置cpu粘性来低落 由于多CPU核切换造成的寄存器等现场重修 带来的性能斲丧 。如worker_cpu_affinity 0001 0010 0100 1000; (四核) 。
worker_connections 2048
写在events部分 。每一个worker进程 能并发处理 惩罚 (发起)的最大毗连 数(包罗 与客户端或后端被署理 服务器间等全部 毗连 数)。nginx作为反向署理 服务器,盘算 公式 最大毗连 数 = worker_processes * worker_connections/4 ,以是 这里客户端最大毗连 数是1024,这个可以增到到8192都不要紧 ,看环境 而定 ,但不能高出 背面 的worker_rlimit_nofile 。当nginx作为http服务器时,盘算 公式内里 是除以2。
worker_rlimit_nofile 10240
写在main部分 。默认是没有设置,可以限定 为操纵 体系 最大的限定 65535。
use epoll
写在events部分 。在Linux操纵 体系 下,nginx默认利用 epoll变乱 模子 ,得益于此,nginx在Linux操纵 体系 下服从 相称 高。同时Nginx在OpenBSD或FreeBSD操纵 体系 上采取 雷同 于epoll的高效变乱 模子 kqueue。在操纵 体系 不支持这些高效模子 时才利用 select 。
2.2.2 http服务器
与提供http服务相干 的一些设置 参数。比方 :是否利用 keepalive啊,是否利用 gzip举行 压缩等。
sendfile on
开启高效文件传输模式 ,sendfile指令指定nginx是否调用sendfile函数来输出文件,镌汰 用户空间到内核空间的上下文切换 。对于平凡 应用设为 on,假如 用来举行 下载等应用磁盘IO重负载应用 ,可设置为off,以均衡 磁盘与网络I/O处理 惩罚 速率 ,低落 体系 的负载。
keepalive_timeout 65 : 长毗连 超时时间 ,单位 是秒,这个参数很敏感,涉及欣赏 器的种类 、后端服务器的超时设置、操纵 体系 的设置 ,可以别的 起一片文章了。长毗连 哀求 大量小文件的时间 ,可以镌汰 重修 毗连 的开销,但假如 有大文件上传,65s内没上传完成会导致失败 。假如 设置时间过长 ,用户又多,长时间保持毗连 会占用大量资源。
send_timeout : 用于指定相应 客户端的超时时间。这个超时仅限于两个毗连 活动 之间的时间,假如 高出 这个时间 ,客户端没有任何活动 ,Nginx将会关闭毗连 。
client_max_body_size 10m
答应 客户端哀求 的最大单文件字节数。假如 有上传较大文件,请设置它的限定 值
client_body_buffer_size 128k
缓冲区署理 缓冲用户端哀求 的最大字节数
模块http_proxy:
这个模块实现的是nginx作为反向署理 服务器的功能 ,包罗 缓存功能(另见文章)
proxy_connect_timeout 60
nginx跟后端服务器毗连 超时时间(署理 毗连 超时)
proxy_read_timeout 60
毗连 乐成 后,与后端服务器两个乐成 的相应 操纵 之间超时时间(署理 吸取 超时)
proxy_buffer_size 4k
设置署理 服务器(nginx)从后端realserver读取并生存 用户头信息的缓冲区巨细 ,默认与proxy_buffers巨细 雷同 ,着实 可以将这个指令值设的小一点
proxy_buffers 4 32k
proxy_buffers缓冲区,nginx针对单个毗连 缓存来自后端realserver的相应 ,网页均匀 在32k以下的话 ,如许 设置
proxy_busy_buffers_size 64k
高负荷下缓冲巨细 (proxy_buffers*2)
proxy_max_temp_file_size
当 proxy_buffers 放不下后端服务器的相应 内容时,会将一部分 生存 到硬盘的临时 文件中,这个值用来设置最大临时 文件巨细 ,默认1024M ,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用 。
proxy_temp_file_write_size 64k
当缓存被署理 的服务器相应 到临时 文件时,这个选项限定 每次写临时 文件的巨细 。proxy_temp_path(可以在编译的时间 )指定写到哪谁人 目次 。
proxy_pass ,proxy_redirect见 location 部分 。
模块http_gzip:
gzip on : 开启gzip压缩输出,镌汰 网络传输。
gzip_min_length 1k : 设置答应 压缩的页面最小字节数,页面字节数从header头得content-length中举行 获取。默认值是20 。发起 设置成大于1k的字节数 ,小于1k大概 会越压越大。
gzip_buffers 4 16k : 设置体系 获取几个单位 的缓存用于存储gzip的压缩结果 数据流。4 16k代表以16k为单位 ,安装原始数据巨细 以16k为单位 的4倍申请内存 。
gzip_http_version 1.0 : 用于辨认 http 协议的版本,早期的欣赏 器不支持 Gzip 压缩 ,用户就会看到乱码,以是 为了支持前期版本加上了这个选项,假如 你用了 Nginx 的反向署理 并盼望 也启用 Gzip 压缩的话 ,由于末了 通讯 是 http/1.0,故请设置为 1.0。
gzip_comp_level 6 : gzip压缩比,1压缩比最小处理 惩罚 速率 最快,9压缩比最大但处理 惩罚 速率 最慢(传输快但比力 斲丧 cpu)
gzip_types :匹配mime范例 举行 压缩 ,无论是否指定,”text/html ”范例 总是会被压缩的。
gzip_proxied any : Nginx作为反向署理 的时间 启用,决定开启大概 关闭后端服务器返回的结果 是否压缩,匹配的条件 是后端服务器必须要返回包罗 ”Via”的 header头 。
gzip_vary on : 和http头有关系 ,会在相应 头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存颠末 gzip压缩的页面,比方 ,用Squid缓存颠末 Nginx压缩的数据。。
2.2.3 server假造 主机
http服务上支持多少 假造 主机。每个假造 主机一个对应的server设置 项,设置 项内里 包罗 该假造 主机相干 的设置 。在提供mail服务的署理 时,也可以创建 多少 server。每个server通过监听地点 或端口来区分。
listen
监听端口 ,默认80,小于1024的要以root启动 。可以为listen *:80、listen 127.0.0.1:80等情势 。
server_name
服务器名,如localhost、www.example.com ,可以通过正则匹配。
模块http_stream
这个模块通过一个简单 的调治 算法来实现客户端IP到后端服务器的负载均衡 ,upstream后接负载均衡 器的名字,后端realserver以 host:port options; 方式构造 在 {} 中 。假如 后端被署理 的只有一台,也可以直接写在 proxy_pass 。
2.2.4 location
http服务中 ,某些特定的URL对应的一系列设置 项。
root /var/www/html
界说 服务器的默认网站根目次 位置 。假如 locationURL匹配的是子目次 或文件,root没什么作用,一样平常 放在server指令内里 或/下。
index index.jsp index.html index.htm
界说 路径下默认访问的文件名 ,一样平常 跟着root放
proxy_pass http:/backend
哀求 转向backend界说 的服务器列表,即反向署理 ,对应upstream负载均衡 器。也可以proxy_pass https://ip:port 。
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这四个临时 如许 设 ,假如 穷究 的话,每一个都涉及到很复杂的内容,也将通过另一篇文章来解读。
关于location匹配规则的写法 ,可以说尤为关键且底子 的,参考文章 nginx设置 location总结及rewrite规则写法;
2.3 别的 2.3.1 访问控制 allow/deny
Nginx 的访问控制模块默认就会安装,而且写法也非常简单 ,可以分别有多个allow,deny,答应 或克制 某个ip或ip段访问,依次满意 任何一个规则就克制 往下匹配。如:
1
2
3
4
5
6
7
8
9
10
location /nginx-status{
stub_status on;
access_log off;
# auth_basic "NginxStatus";
# auth_basic_user_file /usr/local/nginx-1.6/htpasswd;
allow 192.168.10.100;
allow 172.29.73.0/24;
deny all;
}
我们也常用 httpd-devel 工具的 htpasswd 来为访问的路径设置登录暗码 :
1
2
3
4
5
6
7
# htpasswd -c htpasswd admin
New passwd:
Re-typenew password:
Adding password foruser admin
# htpasswd htpasswd admin //修改admin暗码
# htpasswd htpasswd sean //多添加一个认证用户
如许 就天生 了默认利用 CRYPT加密的暗码 文件。打开上面nginx-status的两行解释 ,重启nginx见效 。
2.3.2 列出目次 autoindex
Nginx默认是不答应 列出整个目次 的。如需此功能 ,打开nginx.conf文件,在location,server 或 http段中参加 autoindex on; ,别的 两个参数最好也加上去:
autoindex_exact_size off; 默以为 on,表现 出文件简直 切巨细 ,单位 是bytes。改为off后 ,表现 出文件的大概巨细 ,单位 是kB大概 MB大概 GB
autoindex_localtime on;
默以为 off,表现 的文件时间为GMT时间 。改为on后 ,表现 的文件时间为文件的服务器时间
1
2
3
4
5
6
location /images{
root /var/www/nginx-default/images;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
在学习Linux的过程中有任何不懂的可以免费找我咨询QQ:1815759616