记录之NGINX二三事
WangYaqiu Lv1

持续更新中


Nginx是工作中比较常用的一个中间件,但是由于我所在的公司是虚拟化的平台,一次编译部署做成镜像,之后拿来就用就好了,所以好多配置其实都是一次性配置的,也导致很多东西如果不记录下来的话,随着模板部署的便利性,对应用本身反倒是生疏了,本来是自己的东西,慢慢的就会随时间而逝。

一直有个想法把常用的一些配置记录下来,但每次想到的时候都由于工作太忙推迟,正好最近年前有些时间,开始慢慢的整理下在生产中用到的一些我认为还比较常用并且好用的Nginx配置。

由于整理的这些内容都是想到哪整理到哪,所以上下文基本都是没有关联性的。每个标题都是一个独立的内容。

非root用户 编译并启动 Nginx

由于在linux下,只有以root用户启动的进程才能监听小于1024的端口,那么在实际生产中,操作肯定都是以非root用户来操作的,那么如何以非root用户启动 监听了80和443端口的nginx呢?(由于本人公司生产环境操作用户为work,所以涉及用户的命令,都以work用户为例)

进入编译安装的nginx/sbin目录

1
2
3
# chown root.work nginx
# chmod 750 nginx
# chmod u+s nginx

chmod u+s 就是给某个程序的所有者以SUID权限,SUID程序允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份。


NGINX日志切割脚本

这个就比较常见了,记录一下自己用的一个简单好用的日志切割脚本。

1
2
3
4
5
6
7
8
9
#!/bin/bash
#日志文件存放目录
logs_path="/home/work/server/nginx/logs/"
# pid文件
pid_path="/home/work/server/nginx/logs/nginx.pid"
#重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
#向nginx主进程发送USR1信号。USR1信号是重新打开日志文件
kill -USR1 `cat ${pid_path}`

注意启动权限,非root用户可能会kill -USR1失败,最后一行可以替换成/home/work/server/nginx/sbin/nginx -s reopen


支持WebSocket配置

之前在生产项目中碰到过一个报错,需要NGINX支持WebSocket。

相关报错:

WebSocket failed: Error during WebSocket handshake: Unexpected response code: 400

WebSocket 和HTTP虽然是不同协议,但是两者“握手”方式兼容。通过HTTP升级机制,使用HTTP的Upgrade和Connection协议头的方式可以将连接从HTTP升级为WebSocket。

在location / 中增加配置

1
2
3
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

其中第一行是告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议。
第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。

  • 本文标题:记录之NGINX二三事
  • 本文作者:WangYaqiu
  • 创建时间:2021-01-30 00:00:00
  • 本文链接:http://wangyaqiu.cn/NGINX常用配置/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!