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. brew install nginx
  2. sudo vi /usr/local/etc/nginx/nginx.conf
  3. nginx #启动
  4. 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. - sendfile on; # 是否开启高效传输模式。
  2. - tcp_nopush on; # 防止网络阻塞
  3. - tcp_nodelay on; # 防止网络阻塞
  4. - keepalive_timeout 65; # 客户端保持活动的超时时间,超出服务器会关闭该链接
  5. - types_hash_max_size 2048;
  6. - #server_tokens off;
  7. - #server_names_hash_bucket_size 64;
  8. - #server_name_in_redirect off;
  9. - include /etc/nginx/mime.types; # 加载 mime.types 用于帮助 nginx 识别文件的 mime 类型
  10. - 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. - gzip on; # 开启 gzip 将大大减少发送的数据量,一定要开。
  2. - #gzip_vary on;
  3. - #gzip_proxied any;
  4. - #gzip_comp_level 6;

server 虚拟机设置 重点!

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

SSL 配置

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

location URL匹配设置

匹配规则

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

反向代理 推荐

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

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

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

传递请求头 重要

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

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

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

upstream 负载均衡

https://segmentfault.com/a/1190000014057523

http 里面
分配方式5中:

  • 轮询,默认

按照请求时间顺序分配

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

健康检查

需要安装模块