Node-web05-09-03博客系统使用nginx

基于上一篇你构建好的情况下,不然不用看了

Nginx咋用

1
2
3
4
5
6
7
# 看见一个模版命令
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

# --name给容器起个名字
# -v 挂载的内容
# -d 持久的运行
# --network=host 容器共享阿里云的端口

CRM之 改改试一下

1
2
3
4
5
ssh blog@dev1
docker run --name nginx1 --network=host -d nginx:1.19.1

# 去安全组开放 80端口
浏览器访问你的 ip 即可

nginx配置

  • 最全版参考

  • ~/nginx.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    server{
    # ip v4
    listen 80;
    listen [::]:80;
    server_name localhost;

    # 所有的流量导入如下地方
    location / {
    # 反向代理,流量导入这里
    proxy_pass http://0.0.0.0:3000;
    }
    }

再次启动 nginx

1
2
3
4
5
docker run --name nginx1 --network=host -v ~/nginx.conf:/etc/nginx/conf.d/default.conf -d nginx:1.19.1

此时浏览器访问 你的 ip 即可
# 安全组关闭 3000端口
# 开放 80端口

让next.js的静态文件 不走next.js 而是通过 nginx转发

  • 比如一个资源http://8.130.54.208/_next/static/css/5e2b15b35c6f85e72313.css
    • 流量走向 next.js的进程
  • 我们希望通过 nginx 把静态文件资源转发到 静态服务器
  • 修改配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server{
# ip v4
listen 80;
listen [::]:80;
server_name localhost;

# 将静态文件转发到静态服务器
location ~ ^/_next/static/ {
root /usr/share/nginx/html/;
expires 30d;
}

# 所有的流量导入如下地方
location / {
# 反向代理,流量导入这里
proxy_pass http://0.0.0.0:3000;
}
}
  • 修改启动nginx 命令
1
2
# 静态文件也需要挂载目录
docker run --name nginx1 --network=host -v ~/nginx.conf:/etc/nginx/conf.d/default.conf -v ~/app/.next/static/:/usr/share/nginx/html/_next/static -d nginx:1.19.1

开启 gzip

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
server{
# ip v4
listen 80;
listen [::]:80;
server_name localhost;
gzip on;
gzip_disable "msie6";

gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types
text/plain
text/css
text/js
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
image/svg+xml/javascript;

# 将静态文件转发到静态服务器
location ~ ^/_next/static/ {
root /usr/share/nginx/html/;
expires 30d;
}

# 所有的流量导入如下地方
location / {
# 反向代理,流量导入这里
proxy_pass http://0.0.0.0:3000;
}
}
  • 再次运行容器
1
docker run --name nginx1 --network=host -v ~/nginx.conf:/etc/nginx/conf.d/default.conf -v ~/app/.next/static/:/usr/share/nginx/html/_next/static -d nginx:1.19.1

总结

nginx的好处

静态文静访问更快

  • 动静分离
  • 静态资源可以直接到文件系统,好处是 nginx访问静态文件比 nodejs访问快
  • node需要读文件流
  • nginx专业做这个的
  • 还可以添加 gzip

反向代理

  • 你可以在不同机器上有多个node程序,通过 nginx 转发
    • 当你业务大了,可以水平扩展
  • 负载均衡