1 本地安装

问题1
如何查看nginx运行过程中的日志
解决
在nginx.conf中最外层级添加error_log logs/error.log info;,info是日志记录级别。注意要提前在指定位置创建好设置的日志文件,否则会报错:
nginx: [emerg] open() "/usr/local/Cellar/nginx/1.23.2/logs/error.log" failed (2: No such file or directory)


问题2
使用brew services start nginx后nginx并没有启动
解决
首先使用lsof -i:[port]先查看是否启动,或者端口是否被应用占用。

之后可以直接使用nginx命令查看报错是什么,比如我遇到的几个错误:

  1. nginx: [emerg] "server" directive is not allowed here in /usr/local/etc/nginx/nginx.conf:1 这个是我的nginx.conf配置文件的内容格式不正确
  2. nginx: [alert] kill(70725, 1) failed (1: Operation not permitted) 执行reload权限不够,使用sudo或者root用户来执行
  3. nginx: [emerg] getgrnam("root") failed in /usr/local/etc/nginx/nginx.conf:10 在nginx.conf中的最外层添加的配置user root;不正确,不指明用户group情况下默认和用户名一致,一般这样是错误的。可以使用id [username]查看下group名,对于root可以使用admin,即user root admin;

问题3

Bootstrap failed: 5: Input/output error
Try re-running the command as root for richer errors.

解决
在linux和macOS下想把nginx部署在小于1024端口需要root权限,可以使用sudo -i切换到root用户来运行。如果只使用sudo修饰我遇到了上面问题2中的第四个问题


问题4
在hosts文件中设置了域名,在浏览器打开后还是用DNS请求到别处
解决

  1. 关闭VPN代理,因为浏览器对代理会优先于hosts处理
  2. chrome浏览器可以尝试进入chrome://net-internals清理DNS缓存

问题5
如何查看homebrew安装后的nginx目录在哪
解决
对所有通过homebrew安装的软件都可以使用brew info [name]来查看安装信息,一般都会写明


2 Docker安装

问题1
运行后通过docker logs nginx发现报错[error] 24#24: *7 recv() failed (104: Connection reset by peer) while proxying and reading from upstream ... 解决
配置文件中设置的转发结点没有响应,去查看结点是否成功启动


问题2
nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)解决
容器启动时没有找到配置文件。一般是在创建容器时-v挂载了目录,这样创建要保证宿主机挂载目录下已经有了对应的配置文件(通常先随便创建一个nginx容器拷贝配置文件进去修改)。
还要注意的是,拷贝的时候有可能是直接把nginx拷贝到指定的宿主机目录下,比如-v /a:/b,是指把容器/b目录下面的文件挂载到宿主机/a下面,不包含a和b目录本身,所以配置文件的路径一定要对应好