nginx 安装配置



1、概述

nginx 能够支持 5W 并发连接,并且 cpu、内存 等资源消费非常低,运行非常稳定。


2、环境配置

1、安装 gcc 环境

2、安装第三方开发包 PCRE :解析 正则表达式

3、安装 zlib:提供压缩和解压,zlib用来对http包进行gzip

4、安装 OpenSSL:用来支持 https


3、安装nginx

启动nginx

1
kill -9  master_pid

只会杀死 master进程,woker 进程仍然在运行

1
./nginx -s reload

如果 woker进程 他爹 不是主进程(woker进程id不连续), 要通过 reload 重启一下;

停止nginx

1
2
3
4
5
6
./nginx -g TERM|INT|QUIT
# TERM|INT:用于快速停止
# QUIT: 用于平缓停止

kill TERM|INT|QUIT /nginx/logs/nginx.pid
# 一般不建议 kill -9 Pid 去停止


4、conf 文件详解

https://blog.csdn.net/tjiyu/article/details/53027619

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
user  nginx; # 配置用户、工作组
user nobody;
worker_processes 1; # woker 进程数量

error_log /var/log/nginx/error.log;
error_log /var/log/nginx/error.log notice; # 日志切割
error_log /var/log/nginx/error.log warn; # 日志等级

pid /var/run/nginx.pid; # master进程 pid

# 事件驱动相关
events {
worker_connections 1024; # 线程数
use method; # 时间驱动模型 select,poll,epoll,kqueue

}


http {
include /etc/nginx/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 /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on; # 静群

keepalive_timeout 65;
multi_accept off; # 默认off,一次只允许一个网络连接进来

#gzip on; # 是否使用http压缩
use method;

include /etc/nginx/conf.d/*.conf;
}

server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#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 /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

tcp_nopush: 静群效应,默认开启

accept_mutex:当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题」。

nginx缺省激活了accept_mutex,是一种保守的选择。如果关闭了它,可能会引起一定程度的惊群问题,表现为上下文切换增多(sar -w)或者负载上升,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

multi_accept:告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。

use epoll; :nginx采用epoll事件模型,处理效率高

work_connections: 单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections


5、功能

1、 动静分离


2、负载均衡


3、反向代理