У меня недавно появился сервер 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
быть готовым перед запуском.