Nginx-使用技巧
# Nginx-使用技巧
# Nginx优化静态文件加载
# 配置Https 😄
# 1. 参考文档
nginx配置https访问:
# 2. 问题
# 问题一: 没有配置ssl模块
解决nginx (opens new window): [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx的问题?
Nginx如果未开启SSL模块,配置Https时提示错误 (opens new window) 🚗
已经编译的nginx添加with-http_ssl_module模块 (opens new window)
./configure --prefix=/opt/develop/nginx/sbin/nginx --with-http_stub_status_module --with-http_ssl_module
获取重新安装删除之前配置的nginx目录,使用nginx源码重新配置(./configure时候,添加上边配置)
# 3. 配置
# 免费证书
server {
# SSL 访问端口号为 443
listen 443 ssl;
# 填写绑定证书的域名
server_name ts.cnlxc.cn;
# 替换成已上传的证书文件的目录和名称。
ssl_certificate /opt/develop/ssl/9570621_ts.cnlxc.cn.pem;
# 替换成已上传的证书私钥文件的目录和名称。
ssl_certificate_key /opt/develop/ssl/9570621_ts.cnlxc.cn.key;
ssl_session_timeout 5m;
# 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 请按照以下协议配置
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
if ($host != 'ts.cnlxc.cn') {
rewrite ^/(.*)$ https://ts.cnlxc.cn/$1 permanent;
}
# /vue/dist/ 打包后的dist目录
root /opt/project/static/document;
# 文件代理
location /upFiles/ {
alias /opt/project/upFiles/;
add_header 'Access-Control-Allow-Origin' '*';
}
}
# 网站
server {
listen 80;
# 配置https
server_name ts.cnlxc.cn;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
# http 配置
# server_name localhost;
# root /opt/project/static/document;
# location / {
# try_files $uri $uri/ /index.html;
# }
# location @rewrites {
# rewrite ^(.+)$ /index.html last;
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
}
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
# 开启HTTP/2
# 配置验证
HTTP/2标准是从Google的SPDY上进行改进的,比起HTTP/1.1提升了不少性能,尤其是需要并行多个请求的时候可以显著减少延迟。在现在的网络上,一个网页平均需要请求几十次,而在 HTTP 1.1 时代浏览器能做的就是多开几个TCP连接(通常是 6 个)进行并行HTTP请求,而 HTTP 2 中可以在一个TCP连接中进行多个HTTP请求。HTTP 2 原生支持多个并行请求,因此大大减少了顺序执行的请求的往返程,可以首要考虑开启。
HTTP是基于TCP上的协议,每一次HTTP请求都需要先建立一次TCP。到了HTTP/2,一个TCP可以发送多个HTTP请求
1.在 Nginx 中开启 HTTP 2.0 非常简单,只需要增加一个 http2 标志即可
listen 443 ssl;
# 改为
listen 443 ssl http2;
2
3
如果你担心你的用户用的是旧的客户端,比如 Python 的 requests,暂时还不支持 HTTP 2 的话,那么其实不用担心。如果用户的客户端不支持 HTTP 2,那么连接会自动降级为 HTTP 1.1,保持了后向兼容。因此,所有使用旧 Client 的用户,仍然不受影响,而新的客户端则可以享受 HTTP/2 的新特性
2.确认你的网站或者 API 开启了 HTTP 2
在 Chrome 中打开开发者工具,点开 Protocol 之后在所有的请求中都可以看到请求用的协议了。如果 protocol 这列的值是 h2 的话,那么用的就是 HTTP 2 了
h2协议:表示配置http2成功
http/1.1:是使用阿里云OSS云存储,后形成的连接。跟配置的nginx不同。
# 问题
# 问题一:开启http2失败
nginx: [emerg] the "http2" parameter requires ngx_http_v2_module in /opt/develop/nginx/conf/nginx.conf:54
参考文档:
Nginx配置开启HTTP2支持 (opens new window)
--with-http_v2_module:需要http2模块 (opens new window) 🚗
注意:版本在1.9.5以上 ,
- 重新安装添加此模块:参考配置 (opens new window)
./configure --prefix=/opt/develop/nginx/sbin/nginx --with-http_v2_module
1
- 删除之前解压后的文件,重新安装 🚗
./configure --prefix=/opt/develop/nginx \ --sbin-path=/opt/develop/nginx/sbin/nginx \ --modules-path=/opt/develop/nginx/modules \ --conf-path=/opt/develop/nginx/conf/nginx.conf \ --error-log-path=/opt/develop/nginx/logs/error.log \ --http-log-path=/opt/develop/nginx/logs/access.log \ --pid-path=/opt/develop/nginx/logs/nginx.pid \ --lock-path=/opt/develop/nginx/logs/nginx.lock \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_v2_module
1
2
3
4
5
6
7
8
9
10
11
# 限流 😄
# 1. 参考文章
Nginx 如何限流和访问控制(详解) (opens new window)
# 2. 问题
对nginx的imit_conn_zone理解配置_"zero size shared memory zone "perip"_ (opens new window)
# 3. 配置
http {
# 限流设置
# 这只是设置流量限制和共享内存区域的参数,但实际上并不限制请求速率。具体的限制需要定义具体的url
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;
# 根据IP地址来限制,存储内存大小10M
limit_conn_zone $server_name zone=perip:10m; # $binary_remote_addr是限制同一客户端ip地址;
limit_conn_zone $server_name zone=perserver:10m; # 限制同一server最大并发数;
location / {
# 使用限流配
# 配合limit_req_zone配置使用------平均每秒允许不超过2个请求,突发不超过4个请求,并且处理突发4个请求的时候,没有延迟,等到完成之后,按照正常的速率处理。
limit_req zone=contentRateLimit burst=4 nodelay;
# 限制并发连接数:配合limit_conn_zone使用------单个客户端ip与服务器的连接数.
limit_conn perip 2;
# 限制并发连接数:配合limit_conn_zone使用------限制与服务器的总连接数
limit_conn perserver 20;
# 限制下载速度:限速为 100KB/秒
# 是对每个连接限速100k。这里是对连接限速,而不是对IP限速!如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate * 2
limit_rate 100k;
index index.html index.htm;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23