avatar

目录
nginx 基本配置

上个周哆哆嗦嗦经历了一场项目上线前的配置,感觉自己被运维大佬和项目大佬们拎着脖子拖着走…(是真的菜),特别是 Nginx 的相关配置,自己从前没有接触过,也没有主动学过,经过这次对配置有了大概的了解,现将最近用到的,和使用途中学习到的记录一下。

(现在见了运维大佬我都不好意思抬头…自己好菜啊)

关于安装、开启等基本命令就不赘述了,首先看一下 nginx.conf 研究一下目录结构(查询了一些配置的含义,直接备注在下面了)

plaintext
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
## 定义 Nginx 运行的用户  
#user nobody;

## Nginx 进程数,1 也就是单线程。通常将其设成 CPU cores个数
worker_processes 1;

## 定义全局错误日志类型, 有[debug|info|notice|warn|error|crit|alert|emerg]类型
## Nginx 日志支持输入到文件 file,或者标准错误叔叔 stderr
## 日志激烈可选, 需要注意的是 debug 需要编译时使用 --with-debug 开启
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

## 进程 pid 文件
#pid logs/nginx.pid;


events {
## 设置没有个 worker_process同时开启的最大连接数
worker_connections 1024;
}

## 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
## 在/opt/nginx/conf/,ime.types 写的配置将在 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;

## Nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件
sendfile on;
#tcp_nopush on;

##设置保持客户端连接时间
#keepalive_timeout 0;
keepalive_timeout 65;

## 使用 gzip 压缩
#gzip on;

server {
## 监听端口
listen 8080;

## 域名,可以有多个,用空格隔开
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

## location 模块可以配置 Nginx 如何反应资源请求
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;
#}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}


# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}

第一次猛地一看,还是挺眼花缭乱的,但是其实整体可以分为三个模块:

bash
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
 #全部模块


events {
# events 模块
}

http {
# http全局模块


server {
# server 全局模块


location {
# location 模块
}
}
}
```

1. 全局模块: 配置Nginx 全局的指令

2. events模块: 配置影响 Nginx 服务器或与用户的网络连接。有每个进程的最大连接数、选取哪种事件驱动模型去处理连接请求,是否允许同时接受多个网络连接等。

3. http模块: 可以嵌套多个 server,配置代理、缓存,日志定义等绝大数功能和第三方配置。

4. server模块: 配置虚拟主机相关参数,一个 http 可以有多个 server。

5. location模块: 配置请求的路由,以及各种页面的处理情况。

在实际配置的时候,还使用了``upstream`` 配置负载均衡


upstream myblog.com {

upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大

server ip1 weight = 3; #有多少个服务器就添加多少个ip
server ip2 weight = 2;
}

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

nginx的upstream目前支持4种方式的分配
1. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

加权weight: 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

2. ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3. fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4. url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
server ip1;
server ip2;
hash $request_uri;
hash_method crc32;
}

```

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2020/04/19/nginx/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论