2

I got my /etc/init.d/nginx init script from here: https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

in my /etc/nginx/nginx.conf, there's include /etc/nginx/conf.d/*.conf; which includes the config files of my website.

however, after /etc/init.d/nginx start, it seems nginx is not loading those config files, and it returns 502 on access.

on the other hand, start nginx with command nginx works just fine.

what's wrong here?

6
  • 1
    What OS are you using that a) still uses init scripts and b) didn't provide a service script for the package?
    – jordanm
    Jul 20, 2017 at 17:08
  • @jordanm centos
    – wong2
    Jul 21, 2017 at 2:22
  • Why not installing nginx by using yum?
    – 030
    Jul 23, 2017 at 13:13
  • nginx was installed with yum
    – wong2
    Jul 23, 2017 at 16:04
  • Do you have selinux on that machine? If so, check and post related logs from /var/log/audit/audit.log. If you can - try setting setenforce 0 and relaunch daemon. If it works - then it's certanly selinux problem. Don't forget to re-enable selinux back! How are you running nginx, "by hand", as a root user? What is user of nginx worker process after you run it? Try launching init file as bash -x /etc/init.d/nginx start to see debug output.
    – Andrew
    Jul 24, 2017 at 15:07

3 Answers 3

2
+100

Looks like your problem with wrong init file. Usually nginx install it from RPM and no additional files required. In your link metioned, that it init file tested on CentOS 5, but you using CentOS 6, where it not tested. Try to remove this init file and reinstall nginx from RPM or repo, it should install good one init file.

If you don't want to do it, you could try to copy init file from there. It's copy of init file from installed on CentOS 6 nginx.

0
0

You're using sysvinit scripts, but Red Hat (assuming you use Red Hat / CentOS from the link) has moved on to systemd.

Create

/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

Once that's taken care of,

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

Then don't worry about it because it will now start on boot. But make sure you've killed the nginx instance that you started manually before.

3
  • A systemd unit file comes with package when you do yum install nginx.
    – jordanm
    Jul 21, 2017 at 3:36
  • @Benny I'm using Centos6, which is still using sysvinit
    – wong2
    Jul 22, 2017 at 11:20
  • Delete your init script, or move it aside and "yum reinstall nginx", it should provide you with a proper init script out of the box, there shouldn't be a need to create your own.
    – Alex Berry
    Jul 25, 2017 at 14:32
0

Since CentOS 6 does not provide own nginx packages, it is important to understand where your package comes from. An output of nginx -V would give essential details.

My guess that HTTP 502 errors indicate the inability of nginx process to communicate with an application server. Nginx error_log would contain details on this condition. Running setenforce 0 before service nginx restart would help to understand if a problem is related to SELinux mechanism.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .