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

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

在我的/etc/nginx/nginx.confinclude /etc/nginx/conf.d/*.conf; 其中包括我的网站的configuration文件。

但是,在/etc/init.d/nginx start ,似乎nginx并没有加载这些configuration文件,并且在访问时返回502。

另一方面,用命令nginx启动nginx工作得很好。

这里有什么问题?

看起来像你的问题与错误的init文件。 通常nginx从RPM安装,不需要额外的文件。 在你的链接提到,它的init文件在CentOS 5testing,但你使用CentOS 6,未经testing。 尝试删除这个init文件,并从RPM或repo重新安装nginx,它应该安装好一个init文件。

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

你正在使用sysvinit脚本,但是Red Hat(假设你从链接中使用Red Hat / CentOS)已经进入了systemd。

创build

/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实例。

由于CentOS 6不提供自己的nginx软件包,所以了解你的软件包来自哪里是很重要的。 nginx -V的输出将提供基本的细节。

我猜测HTTP 502错误表明nginx进程无法与应用程序服务器进行通信。 Nginx的error_log将包含这个条件的细节。 在服务nginx重新启动之前运行setenforce 0将有助于了解一个问题是否与SELinux机制有关。