Nginx-notes

Nginx

Nginx是一个高性能的HTTP和反向代理服务器,占有内存少,并发能力强。

相关概念

1、正向代理

​ 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

2、反向代理

​ 客户端只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏真实服务器IP地址。

3、负载均衡

​ 增加服务器数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同服务器。

4、动静分离

​ 为了加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原先单个服务器的压力。

Nginx安装相关命令

相关依赖

1
2
3
sudo apt-get install libpcre3 libpcre3-dev  
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev
1
sudo apt-get install nginx
1
2
3
4
查看Nginx进程	 ps -ef | grep nginx
查看端口开放 firewall-cmd --list-all
开放端口 sudo firewall-cmd --add-port=8001/tcp --permanent
重新加载 firewall-cmd --reload

Nginx常用命令

必须要先进入nginx目录下cd /usr/local/nginx/sbin

1
2
3
4
查看版本号 ./nginx -v
关闭 ./nginx -s stop
启动 ./nginx
重加载 ./nginx -s reload

Nginx配置文件

Nginx配置文件位置

/usr/local/nginx/conf/nginx.conf

Nginx配置文件组成

1、全局块

​ 从配置文件开始到events块开始。主要会设置一些影响Nginx服务器整体运行的配置指令。

1
2
3
4
5
6
7
8
#user  nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

2、events块

涉及的指令主要影响Nginx服务器与用户网络的连接。

1
2
3
events {
worker_connections 1024;
}

3、http块(http全局块、server块)

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
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 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root 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 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;
#}
}

实验

反向代理

  • 安装Tomcat服务器

  • 开放8080端口(Tomcat服务器默认端口)

配置nginx.conf

1
2
3
4
5
6
server {
listen 80;
server_name 192.168.142.128;
location /{
proxy_pass http://127.0.0.1:8080;
}

在浏览器中访问192.168.142.128时,该请求会被Nginx服务器转发到Tomcat服务器处理,处理结果由Nginx服务器返回给客户端,不对外暴露Tomcat服务器IP地址,这就是反向代理。

配置不同路径访问不同Tomcat服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 9001;
# listen somename:8080;
server_name 192.168.142.128;

location ~ /edu/ {
#root html;
#index index.html index.htm;
proxy_pass http://127.0.0.1:8081
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8082
}
}

负载均衡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#keepalive_timeout  0;
keepalive_timeout 65;

#gzip on;
upstream myserver { # 配置
server 192.168.142.128:8081;
server 192.168.142.128:8082;
}
server {
listen 80;
server_name 192.168.142.128;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;
proxy_pass http://myserver; #配置
index index.html index.htm;
}

nginx 分配服务器策略

第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

Nginx基本原理

一个master与多个worker进程

master监听client请求,并将请求通知worker,多个worker争抢这个请求。

每个worker进程都是独立的,其中一个worker出现问题,不会影响其它worker进程。继续进行争抢,实现请求过程,不会造成服务中断。

worker 数和服务器的 cpu 数相等是最为适宜的

发送请求,占用了 woker 的几个连接数? 答案:2 (静态资源)或者 4 个(动态资源,需要与tomcat服务器连接)。

nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?

  • 普通的静态访问最大并发数是: worker_connections * worker_processes /2,

  • 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。

-------------本文结束感谢您的阅读-------------
0%