Назад | Перейти на главную страницу

Nginx не запускается после загрузки, но отлично работает с ручной командой

У меня недавно появился сервер Ubuntu 18, и я, мягко говоря, немного смущен.

Во-первых: если я бегу sudo service nginx start или sudo systemctl start nginx, вроде все работает. Мой сайт загружается, и оба sudo service nginx status и sudo systemctl status nginx вернуть все ясное сообщение.

Теперь проблема: когда я перезагружаю свой сервер, nginx не запускается автоматически, поскольку веб-сайт не загружается. Я попытался sudo systemmctl enable nginx и попробовал еще одну перезагрузку. Очередной раз, nginx не работает, так как веб-сайт не загружается.

Фактически, если я перезагружу свой сервер sudo reboot а потом sudo service nginx status или sudo systemctl status nginx Я получаю сообщение об ошибке. Несмотря на сообщение об ошибке, я могу запустить sudo service nginx start или sudo systemctl start nginx и все вернется к работе.

Я получаю следующее сообщение об ошибке:

(venv) user@server:/data/project$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2019-02-26 17:50:18 CET; 1min 6s ago
     Docs: man:nginx(8)
  Process: 830 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

Feb 26 17:50:18 md3.tudelft.nl systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 26 17:50:18 md3.tudelft.nl nginx[830]: nginx: [emerg] open() "/data/project/uwsgi_params" failed (2: No such file or directory) in /etc/nginx/sites-enabled/paintingViewer.conf
Feb 26 17:50:18 md3.tudelft.nl nginx[830]: nginx: configuration file /etc/nginx/nginx.conf test failed
Feb 26 17:50:18 md3.tudelft.nl systemd[1]: nginx.service: Control process exited, code=exited status=1
Feb 26 17:50:18 md3.tudelft.nl systemd[1]: nginx.service: Failed with result 'exit-code'.
Feb 26 17:50:18 md3.tudelft.nl systemd[1]: Failed to start A high performance web server and a reverse proxy server.

Что ж, это кажется довольно простым: он не может найти файл uwsgi_params. Однако файл uwsgi_params существует и находится в нужном месте.

Мой nginx .conf файл:

# the upstream component nginx needs to connect to
upstream django {
     server unix:///data/project/paintingViewer.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket -> works if we use Djano's build in webserver.
}

# configuration of the server
server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name server;
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /data/project/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /data/project/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /data/project/uwsgi_params; # the uwsgi_params file you installed
    }
}

и /data/project/uwsgi_params файл:

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

Я не понимаю нескольких вещей:

1) Как это возможно, что nginx работает, если я запускаю start команда, но это nginx не работает при загрузке?

2) Как status прочтите это nginx не могу найти uwsgi файл, пока он работает с start?

3) Как мне получить nginx нормально работать при перезагрузке?

Nginx не может найти файл, потому что монтируемая / внешняя файловая система не готова к запуску после загрузки. Чтобы указать nginx дождаться монтирования, используйте systemctl edit nginx.service и добавьте следующие строки:

[Unit]
RequiresMountsFor=<mountpoint>

или в вашем конкретном случае:

[Unit]
RequiresMountsFor=/data

nginx теперь всегда будет ждать /data быть готовым перед запуском.