nginx一本通

nginx 配置,也写了好多次了,这里做个总结。

web服务器,nginx 和 apache,选择nginx

负载均衡
主要分两部分,传输层和应用层
传输层,硬件分离
应用层。端口分离

补充知识

软链接

ln -s 创建软连接。创建软连接。类似于 windows里的快捷方式。

语法

1
ln -s 源文件 目标文件
  • ln link的意思
  • -s 是 symbolic 的意思

链接的文件,是同步的,你在哪里修改都会同步生效。
链接,也分为软连接和硬连接。区别是带不带 -s
eg:

1
ln -s /home/fa/Desktop /mnt/c/Users/Otto/Desktop

这样 后者的文件是前者的映射。

通过 ln --help 来查看帮助。取消链接,删除目标文件

参考链接 https://www.cnblogs.com/kex1n/p/5193826.html

如果访问页面全是错误,可以修改 chomod -R 755 /var/www

安装

mac

1
2
3
4
brew install nginx
sudo vi /usr/local/etc/nginx/nginx.conf
nginx #启动
brew services start nginx # 作为服务启动

略。

常用命令

启动nginx

nginx

查看是否在运行

1
ps aux | grep nginx

一般来说,会有两个进程:

  • master process 负责调度
  • worker process 负责工作

如果配置较多,worker process会多。

退出 nginx

  • nginx -s stop 快速关闭,相当于杀掉进程
  • nginx -s quit 优雅退出,等到请求关闭后才关闭。

推荐 quit 比较平滑

另一种方法。忽略就可以:

  • kill -INT cat /var/run/nginx.pid`` 对应 nignx -s stop
  • kill -QUIT cat /var/run/nginx.pid`` 对应 nginx -s quit

nginx 进程号

1
cat /var/run/nginx.pid

得到运行中的nginx 进程号,和 ps aux | grep nginx 获取的一样。

生效最新配置

1
nginx -s reload

重启生效。
对应 kill -HUP cat /var/run/nginx.pid

重读日志文件

备份日志时候,把接下来的日志文件写入新文件

1
nginx -s reopen

平滑改变日志。对应 kill -USR1 进程号

不停机平滑升级 nginx

kill -USR2 进程号
几乎用不到

检查 配置文件

nginx -t如果报错,需要加 sudo

端口号小于1024的需要root权限

配置文件

主配置文件在 /etc/nginx/nginx.conf文章末尾一般会引用其他文件,比如include /etc/nginx/site-enabled/*

sites-availabel 和 sites-enabled 区别

主配置文件一般引用的是 enabled文件夹,所以enabled文件生效

一般通过 ln -s sites-available/default sites-enabled/default软连接

也可以设置为 disabled 文件夹为不用的配置。

模块

包含了喜闻乐见的反向代理、负载均衡

main全局设置

  • user www-data; # 指定 Worker 进程的运行用户以及用户组,默认
  • worker_processes auto; # nginx要开启的worker进程数。最优值有很多因素,不能确定时候使用auto
  • pid /run/nginx.pid; # 记录pid进程的存储文件位置。查找进程号
  • include /etc/nginx/modules-enabled/*.conf; # 配置文件

events 事件设置

  • worker_connections 768; # 每个worker进程能并发处理的最大连接数
  • multi_accept on;
  • 这里会有个最有计算公式。我复制如下。

worker_connections 设置每个 Worker 进程能并发处理的最大连接数。
最大客户端连接数由 worker_processes和 worker_connections 决定:
Nginx 作为 HTTP 服务器时,Max_clients = worker_processes * worker_connections;
Nginx 作为反向代理时,Max_clients = worker_processes * worker_connections / 4。

http 服务器设置

基础设置

了解即可。

1
2
3
4
5
6
7
8
9
10
- sendfile on; # 是否开启高效传输模式。
- tcp_nopush on; # 防止网络阻塞
- tcp_nodelay on; # 防止网络阻塞
- keepalive_timeout 65; # 客户端保持活动的超时时间,超出服务器会关闭该链接
- types_hash_max_size 2048;
- #server_tokens off;
- #server_names_hash_bucket_size 64;
- #server_name_in_redirect off;
- include /etc/nginx/mime.types; # 加载 mime.types 用于帮助 nginx 识别文件的 mime 类型
- default_type application/octet-stream; # 文件默认 mime 类型,例如如果没有配置 asp 环境,ng 不解析,此时浏览器访问 asp 会下载。

SSL 设置

了解即可。具体的HTPPS会讲

登录设置

日志地址

  • access_log /var/log/nginx/access.log; # access_log 地址
  • error_log /var/log/nginx/errorl.log;

    Gzip 设置

    1
    2
    3
    4
    - gzip on; # 开启 gzip 将大大减少发送的数据量,一定要开。
    - #gzip_vary on;
    - #gzip_proxied any;
    - #gzip_comp_level 6;

    server 虚拟机设置 重点!

1
2
3
4
5
- listen 80 default_server; # 监听80端口
- listen [::]:80 default_server;
- autoindex on;
- autoindex_exact_size off;
- autoindex

SSL 配置

1
2
3
4
5
6
7
- #listen 443 ssl default_server;
- #listen [::]:443 ssl default_server;
- root /var/www/html; # 虚拟主机根目录
- index index.html index.php
- error_page 404 /404.html;
- server_name _; # 设置域名 localhost xxx.com
- location / {try_files $url $url/ =404;}

location URL匹配设置

匹配规则

  • 记住一个规则 location ^~ /img {} 这个符号会让规则前提。
  • =精确匹配
  • ^~ 提高前缀字符串匹配优先级
  • ~ 区分大小写的正则匹配
  • ~* 不区分大小写的正则
  • / 通用匹配

反向代理 推荐

如果想把一个请求(反向代理)给http代理服务器,需要在Location模块中指定proxy_pass指令。

发送请求 127.0.0.1:80 ==> www.a.com

1
2
3
4
5
6
7
8
9
10
server{
listen 80;
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

传递请求头 重要

通过 proxy_set_header 指令可以改变请求头字段的值。

该指令可以在 location 块或更高级的块中指定,比如 server 或 http。

1
2
3
4
5
6

- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 后端服务器可以通过这个获取用户真实ip
- proxy_set_header Accept-Encoding "";
- proxy_pass http://localhost:8000;

upstream 负载均衡

https://segmentfault.com/a/1190000014057523

http 里面
分配方式5中:

  • 轮询,默认

按照请求时间顺序分配

1
2
3
4
upstream jochen {
server 192.168.4.221:80;
server 192.168.4.222:80;
}
  • weight 权重比例
    1
    2
    3
    4
    upstream jochen {
    server 192.168.4.221:80 weight=10;
    server 192.168.4.222:80 weight=20;
    }
  • ip_hash
    1
    2
    3
    4
    5
    upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
    ip_hash;
    }

健康检查

需要安装模块

扫一扫,分享到微信

请我喝杯咖啡吧~