CENTOS7 установка источника NGINX
Что такое Nginx
Nginx является легкий из веб - сервера, обратного прокси - сервера и электронной почты (IMAP / POP3) прокси - сервер, который характеризуется владение меньше памяти, параллельной способности поддерживать реакцию до 50000 одновременных соединений. На самом деле способность делать параллельную Nginx в том же типе производительности веб - сервера лучше, с помощью пользователей Nginx веб - сайта являются: Baidu, Jingdong , Сина , Netease , Tencent , Taobao и т.д.
Два экологической подготовки
1 Подготовьте чистый сервер centos7 или виртуальную машину или купить VPS. Nginx является разработка C, рекомендуется работать на Linux, конечно же, вы можете также установить версию Windows.
2 установить зависимости, установка требует Gcc среды, необходимо установить GCC, HTTP Zlib используется для упаковки содержимого прессовали с помощью Gzip, OpenSSL поддерживает HTTPS протокол SSL, библиотека PCRE используется для сопоставления регулярное, правила перезаписи, которые необходимо
3. Загрузите последнюю стабильную версию Nginx, текущая стабильная версия 1.14.2. Скачать официальный адрес сайта: HTTP: //nginx.org/en/download.html, скачать инсталляционный пакет будет загружен на CentOS.
Конечно, вы можете использовать Wget команду для загрузки непосредственно в системы CentOS:
Wget -c http://nginx.org/download/nginx-1.14.2.tar.gz
GroupAdd WWW
useradd -s / SBIN / NOLOGIN -g WWW WWW
4 скомпилировать и установить
Загрузите установочный пакет в каталог, распакованный Nginx, Nginx в каталог после распаковки, параметров конфигурации установки:
деготь -zxvf Nginx -1.14.2.tar.gz
кд Nginx -1.14.2
./configure --user = WWW --group = WWW prefix = / USR / местные / Nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module
http_stub_status_module роль: Nginx мониторинга состояния операционной
http_sub_module эффект: для замены строки
http_ssl_module роль: поддержка доступа по протоколу HTTPS
http_gzip_static_module действие: реализовать статическое сжатие, экономия трафика
Компиляция установки
сделать && сделать установку
5 Управление Nginx
Nginx редактор сценариев запуска
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
|
# chkconfig: 2345 99 20
#description: nginx-server
nginx=
/usr/local/nginx/sbin/nginx
case
$1
in
start)
netstat
-anptu |
grep
nginx
if
[ $? -
eq
0 ]
then
echo
"nginx-server is already running"
else
echo
"nginx-server begin start"
$nginx
fi
;;
stop)
$nginx -s stop
if
[ $? -
eq
0 ]
then
echo
"nginx-server is stoped"
else
echo
"nginx-server stop fail,try again"
fi
;;
status)
netstat
-anlpt |
grep
nginx
if
[ $? -
eq
0 ]
then
echo
"nginx-server is running"
else
echo
"nginx-server is stoped"
fi
;;
restart)
$nginx -s reload
if
[ $? -
eq
0 ]
then
echo
"nginx-server is begin restart"
else
echo
"nginx-server restart fail"
fi
;;
*)
echo
"please enter {start restart status stop}"
;;<br>
esac
|
vi /etc/init.d/nginx
chkconfig --add nginx 将nginx 添加为系统服务
chkconfig --list|grep nginx
chmod +x /etc/init.d/nginx
.停止和重新载入nginx配置。
/usr/local/nginx/sbin/nginx –s stop # 停止
/usr/local/nginx/sbin/nginx -s reload # 重载nginx使配置生效
测试配置文件是否正常。
/usr/local/nginx/sbin/nginx –t
二 nginx优化
1 关于系统连接数的优化
linux 默认值 open files 和 max user processes 为 1024
说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程
#ulimit -n
1024
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。
解决方法:
使用 ulimit Cn 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)
有如下三种修改方式:
1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果
备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制
soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。
soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。
2 全局配置优化:
nginx初始初始进程数量
worker_processes 8;
单进程处理最大请求连接数
worker_connections 65535;
绑定CPU
四核cpu配置
worker_processes 4; #工作进程数量
worker_cpu_affinity 0001 0010 0100 1000; #开启多核
IO模型
events {
worker_connections 65535; #每个工作进程允许的最大连接数
use epoll; #使用高性能的 epoll 事件驱动,处理效率高
#什么是epoll 名词解释 http://www.mamicode.com/info-detail-2283798.html
}
http模块优化:
长连接超时时长
keepalive_timeout 65;
压缩
gzip on;
静态数据缓存过期时长
允许客户端缓存所有图片数据360天
location ~ \.(jpg|gif|png|jpeg)$ {
expires 360d;
}
关于安全:
修改nginx运行的用户
user www
隐藏版本号
再http模块中添加
server_tokens off;
拒绝访问敏感目录
拒绝访问 admin和config目录
location ~ ^/(admin|config)/ {
deny all;
}
三 Nginx 的工作原理
![Nginx为什么高效?一文搞明白Nginx核心原理](https://s2.51cto.com/oss/201909/09/318512423529c2329f5aa4135e5ce786.jpeg)
Nginx 服务器,正常运行过程中:
- 多进程:一个 Master 进程、多个 Worker 进程
- Master 进程:管理 Worker 进程
- 对外接口:接收外部的操作(信号)
- 对内转发:根据外部的操作的不同,通过信号管理 Worker
- 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
- Worker 进程:所有 Worker 进程都是平等的
- 实际处理:网络请求,由 Worker 进程处理;
- Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。
HTTP 连接建立和请求处理过程:
- Nginx 启动时,Master 进程,加载配置文件
- Master 进程,初始化监听的 socket
- Master 进程,fork 出多个 Worker 进程
- Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求
Nginx 高性能、高并发:
- Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)
- 请求的完整过程:
- 建立连接
- 读取请求:解析请求
- 处理请求
- 响应请求
- 请求的完整过程,对应到底层,就是:读写 socket 事件
四 匹配模式及顺序
location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索
一 什么是nginx
Nginx是一款轻量级的Web 服务器,反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,能够支持高达 50,000 个并发连接数的响应。事实上nginx的并发能力确实在同类型的网页服务器中表现较好,使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
二 环境准备
1 准备一台干净的centos7服务器,或者虚拟机或者购买的VPS。Nginx是C开发的,建议在 Linux上运行,当然,也可以安装Windows 版本。
2 安装依赖,安装需要gcc环境,所以需要安装gcc;zlib是用来对http包的内容进行gzip压缩的;openssl则是支持https的SSL协议;pcre库是用来匹配正则的,rewrite规则需要它
3.下载最新稳定版的nginx,目前稳定版是1.14.2。官网下载地址:http://nginx.org/en/download.html,下载后将安装包上传到CentOS中。
当然也可以使用wget命令直接下载到CentOS系统中:
wget -c http://nginx.org/download/nginx-1.14.2.tar.gz
groupadd www
useradd -s /sbin/nologin -g www www
4 编译安装
进入下载的安装包目录,解压nginx,进入nginx解压后的目录,配置安装参数:
tar -zxvf nginx -1.14.2.tar.gz
cd nginx -1.14.2
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module
http_stub_status_module 作用:监控nginx运行状态
http_sub_module 作用:用于替换字符串
http_ssl_module 作用:支持https访问
http_gzip_static_module 作用:实现静态压缩功能,节约带宽
进行编译安装
make && make install
5 管理nginx
编辑nginx 启动脚本
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
|
# chkconfig: 2345 99 20
#description: nginx-server
nginx=
/usr/local/nginx/sbin/nginx
case
$1
in
start)
netstat
-anptu |
grep
nginx
if
[ $? -
eq
0 ]
then
echo
"nginx-server is already running"
else
echo
"nginx-server begin start"
$nginx
fi
;;
stop)
$nginx -s stop
if
[ $? -
eq
0 ]
then
echo
"nginx-server is stoped"
else
echo
"nginx-server stop fail,try again"
fi
;;
status)
netstat
-anlpt |
grep
nginx
if
[ $? -
eq
0 ]
then
echo
"nginx-server is running"
else
echo
"nginx-server is stoped"
fi
;;
restart)
$nginx -s reload
if
[ $? -
eq
0 ]
then
echo
"nginx-server is begin restart"
else
echo
"nginx-server restart fail"
fi
;;
*)
echo
"please enter {start restart status stop}"
;;<br>
esac
|
vi /etc/init.d/nginx
chkconfig --add nginx 将nginx 添加为系统服务
chkconfig --list|grep nginx
chmod +x /etc/init.d/nginx
.停止和重新载入nginx配置。
/usr/local/nginx/sbin/nginx –s stop # 停止
/usr/local/nginx/sbin/nginx -s reload # 重载nginx使配置生效
测试配置文件是否正常。
/usr/local/nginx/sbin/nginx –t
二 nginx优化
1 关于系统连接数的优化
linux 默认值 open files 和 max user processes 为 1024
说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程
#ulimit -n
1024
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。
解决方法:
使用 ulimit Cn 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)
有如下三种修改方式:
1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果
备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制
soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。
soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。
2 全局配置优化:
nginx初始初始进程数量
worker_processes 8;
单进程处理最大请求连接数
worker_connections 65535;
绑定CPU
四核cpu配置
worker_processes 4; #工作进程数量
worker_cpu_affinity 0001 0010 0100 1000; #开启多核
IO模型
events {
worker_connections 65535; #每个工作进程允许的最大连接数
use epoll; #使用高性能的 epoll 事件驱动,处理效率高
#什么是epoll 名词解释 http://www.mamicode.com/info-detail-2283798.html
}
http模块优化:
长连接超时时长
keepalive_timeout 65;
压缩
gzip on;
静态数据缓存过期时长
允许客户端缓存所有图片数据360天
location ~ \.(jpg|gif|png|jpeg)$ {
expires 360d;
}
关于安全:
修改nginx运行的用户
user www
隐藏版本号
再http模块中添加
server_tokens off;
拒绝访问敏感目录
拒绝访问 admin和config目录
location ~ ^/(admin|config)/ {
deny all;
}
三 Nginx 的工作原理
![Nginx为什么高效?一文搞明白Nginx核心原理](https://s2.51cto.com/oss/201909/09/318512423529c2329f5aa4135e5ce786.jpeg)
Nginx 服务器,正常运行过程中:
- 多进程:一个 Master 进程、多个 Worker 进程
- Master 进程:管理 Worker 进程
- 对外接口:接收外部的操作(信号)
- 对内转发:根据外部的操作的不同,通过信号管理 Worker
- 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
- Worker 进程:所有 Worker 进程都是平等的
- 实际处理:网络请求,由 Worker 进程处理;
- Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。
HTTP 连接建立和请求处理过程:
- Nginx 启动时,Master 进程,加载配置文件
- Master 进程,初始化监听的 socket
- Master 进程,fork 出多个 Worker 进程
- Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求
Nginx 高性能、高并发:
- Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)
- 请求的完整过程:
- 建立连接
- 读取请求:解析请求
- 处理请求
- 响应请求
- 请求的完整过程,对应到底层,就是:读写 socket 事件
四 匹配模式及顺序
location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索