Nginx: Job for nginx.service failed because the control process exited

前端 未结 19 1014
予麋鹿
予麋鹿 2021-01-29 19:31

I got a problem which I have been trying to fix for a few days now and I don\'t know what to do, have been looking for answers but all of those I found didn\'t help me.

相关标签:
19条回答
  • 2021-01-29 20:15

    I'm using RHEL 7.4 with NGINX 1.13.8 and if I do the same with sudo, it works Ok:

    sudo systemctl status nginx.service
    

    Just make sure whoever wants to use nginx.service has execute permissions to it.

    0 讨论(0)
  • 2021-01-29 20:17

    change the port may help as 80 port is already using somewhere

    vi /etc/nginx/sites-available/default
    

    Change the port:

    listen 8080 default_server;
    listen [::]:8080 default_server;
    

    And then restart the nginx server

    nginx -t
    service nginx restart
    
    0 讨论(0)
  • 2021-01-29 20:18

    The cause of the issue is this, I already had Apache web server installed and actively listening on port 80 on my local machine.

    Apache and Nginx are the two major open-source high-performance web servers capable of handling diverse workloads to satisfy the needs of modern web demands. However, Apache serves primarily as a HTTP server whereas Nginx is a high-performance asynchronous web server and reverse proxy server.

    The inability of Nginx to start was because Apache was already listening on port 80 as its default port, which is also the default port for Nginx.

    One quick workaround would be to stop Apache server by running the command below

    systemctl stop apache2
    systemctl status apache2
    

    And then starting up Nginx server by running the command below

    systemctl stop nginx
    systemctl status nginx
    

    However, this same issue will arise again when we try to start Apache server again, since they both use port 80 as their default port.

    Here's how I fixed it:

    Run the command below to open the default configuration file of Nginx in Nano editor

    sudo nano /etc/nginx/sites-available/default
    

    When the file opens in Nano editor, scroll down and change the default server port to any port of your choice. For me, I chose to change it to port 85

    # Default server configuration
    #
    server {
           listen 85 default_server;
           listen [::]:85 default_server;
    

    Also, scroll down and change the virtual host port to any port of your choice. For me, I also chose to change it to port 85

    # Virtual Host configuration for example.com
    #
    # You can move that to a different file under sites-available/ and symlink that
    # to sites-enabled/ to enable it.
    #
    # server {
    #        listen 85;
    #        listen [::]:85;
    

    Then save and exit the file by pressing on your keyboard:

    Ctrl + S
    Ctrl + X
    

    You may still be prompted to press Y on your keyboard to save your changes.

    Finally, confirm that your configuration is correct and restart the Nginx server:

    sudo nginx -t
    sudo systemctl restart nginx
    

    You can now navigate to localhost:nginx-port (localhost:85) on your browser to confirm the changes.

    Displaying the default Nginx start page

    If you want the default Nginx start page to show when you navigate to localhost:nginx-port (localhost:85) on your browser, then follow these steps:

    Examine the directory /var/www/html/ which is the default root directory for both Apache and Nginx by listing its contents:

    cd ~
    ls /var/www/html/
    

    You will 2 files listed in the directory:

    index.html                # Apache default start page
    index.nginx-debian.html   # Nginx default start page
    

    Run the command below to open the default configuration file of Nginx in Nano editor:

    cd ~
    sudo nano /etc/nginx/sites-available/default
    

    Change the order of the index files in the root directory from this:

    root /var/www/html;
    
            # Add index.php to the list if you are using PHP
            index index.html index.htm index.nginx-debian.html;
    

    to this (putting the default Nginx start page - index.nginx-debian.html in the 2nd position immediately after index):

    root /var/www/html;
    
            # Add index.php to the list if you are using PHP
            index index.nginx-debian.html index.html index.htm;
    

    Then save and exit the file by pressing on your keyboard:

    Ctrl + S
    Ctrl + X
    

    You may still be prompted to press Y on your keyboard to save your changes.

    Finally, confirm that your configuration is correct and restart the Nginx server:

    sudo nginx -t
    sudo systemctl restart nginx
    

    You can now navigate to localhost:nginx-port (localhost:85) on your browser to confirm the changes.

    That's all.

    I hope this helps

    0 讨论(0)
  • 2021-01-29 20:18

    For my case, I need to run

    sudo nginx -t
    

    It will check if Nginx configuration is correct or not, if not, it will show you which configuration causes the error.

    Then you need to go to /etc/nginx/sites-available to fix the broken configuration.

    After that, you can restart Nginx without any problem.

    sudo systemctl restart nginx
    
    0 讨论(0)
  • 2021-01-29 20:19

    Try to run the following two commands:

    sudo fuser -k 80/tcp

    sudo fuser -k 443/tcp

    Then execute

    sudo service nginx restart

    If that worked, your hosting provider might be installing Apache on your server by default during a fresh install, so keep reading for a more permenant fix. If that didn't work, keep reading to identify the issue.

    Run nginx -t and if it doesn't return anything, I would verify Nginx error log. By default, it should be located in /var/log/nginx/error.log.

    You can open it with any text editor: sudo nano /var/log/nginx/error.log

    Can you find something suspicious there?

    The second log you can check is the following

    sudo nano /var/log/syslog

    When I had this issue, it was because my hosting provider was automatically installing Apache during a clean install. It was blocking port 80.

    When I executed sudo nano /var/log/nginx/error.log I got the following as the error log:

    2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
    2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
    2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
    

    What the above error is telling is that it was not able to bind nginx to port 80 because it was already in use.

    To fix this, you need to run the following:

    yum install net-tools

    sudo netstat -tulpn

    When you execute the above you will get something like the following:

    Proto Recv-Q Send-Q Local Address           Foreign Address         State    PID/Program name
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1762/httpd
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1224/sshd
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1528/sendmail:acce
    tcp6       0      0 :::22                   :::*                    LISTEN      1224/sshd
    

    You can see that port 80 is blocked by httpd (Apache). This could also be port 443 if you are using SSL.

    Get the PID of the process that uses port 80 or 443. And send the kill command changing the <PID> value:

    sudo kill -2 <PID>

    Note in my example the PID value of Apache was 1762 so I would execute sudo kill -2 1762

    Aternatively you can execute the following:

    sudo fuser -k 80/tcp

    sudo fuser -k 443/tcp

    Now that port 80 or 443 is clear, you can start Nginx by running the following:

    sudo service nginx restart

    It is also advisable to remove whatever was previously blocking port 80 & 443. This will avoid any conflict in the future. Since Apache (httpd) was blocking my ports I removed it by running the following:

    yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_perl mod_revocator mod_ssl mod_wsgi

    Hope this helps.

    0 讨论(0)
  • 2021-01-29 20:19
    • use these command to

      1. sudo service apache2 stop

      2. sudo apt-get purge apache2

      3. sudo apt-get update

      4. sudo apt-get install nginx

      5. sudo service nginx restart

    0 讨论(0)
提交回复
热议问题