`/etc/init.d/nginx start` 和 `nginx` 之间的不同行为

`/etc/init.d/nginx start` 和 `nginx` 之间的不同行为

/etc/init.d/nginx从这里获得了我的初始化脚本:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

在我的 中/etc/nginx/nginx.conf,其中include /etc/nginx/conf.d/*.conf;包含我的网站的配置文件。

然而,之后/etc/init.d/nginx start,似乎 nginx 没有加载这些配置文件,并且在访问时返回 502。

另一方面,使用命令启动 nginxnginx就可以了。

这里有什么问题?

答案1

看起来您的问题出在错误的 init 文件上。通常nginx从 RPM 安装它,不需要其他文件。在您的链接中提到,它的 init 文件在 CentOS 5 上经过测试,但您使用的是 CentOS 6,它未经测试。尝试删除此 init 文件并从 RPM 或 repo 重新安装 nginx,它应该会安装一个好的 init 文件。

如果你不想这样做,你可以尝试从那里。这是安装在 CentOS 6 nginx 上的 init 文件的副本。

答案2

您正在使用 sysvinit 脚本,但 Red Hat(假设您使用链接中的 Red Hat / CentOS)已转向 systemd。

创造

/lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

一旦解决了这个问题,

systemctl enable nginx.service && systemctl start nginx.service

那么不用担心,因为它现在会在启动时启动。但请确保您已终止之前手动启动的 nginx 实例。

答案3

由于 CentOS 6 不提供自己的 nginx 包,因此了解包的来源非常重要。输出nginx -V将提供必要的详细信息。

我猜测 HTTP 502 错误表示 nginx 进程无法与应用程序服务器通信。Nginx error_log 将包含有关此情况的详细信息。setenforce 0在服务 nginx 重启之前运行将有助于了解问题是否与 SELinux 机制有关。

相关内容