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

Django (uWSGI) и php (fastcgi) NGINX

Я новичок в настройке серверов, и у меня возникают проблемы с тем, чтобы php работал с моим приложением django с использованием UWSGI на nginx. Django отлично работает с uwsgi, а php отлично работает, когда я удаляю конфигурацию сайта django, но когда я использую django и php вместе, файлы php не работают (браузер просто загружает их), любые идеи (пожалуйста, будьте конкретны, я новичок в этом прочее)? Я открыт для предложений, здесь я уже немного отчаялся. Спасибо

Вот мой файл конфигурации django-site для nginx:

# mysite_nginx.conf
####################

# the upstream component nginx needs to connect to
upstream django {
# server unix:///home/appdeploy/uwsgi-tutorial/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 173.10.235.37; # substitute your machine's IP address or FQDN
charset     utf-8;

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

# Django media
location /media  {
    alias /home/appdeploy/v1/website/media;
  # your Django project's media files - amend as required
}

location /static {
    alias /home/appdeploy/v1/website/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     /home/appdeploy/v1/website/uwsgi_params; # the uwsgi_params file you             installed
}
error_page  404              /404.html;
location = /404.html {
  root /home/appdeploy/v1; ## or whereever You put it - will not be needed if 404.html    is where index.html is placed
}

}

Вот и мой файл conf по умолчанию (с php fast cgi):

# default.conf

server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;

location / {
    root   /home/appdeploy/v1/website;
    index  index.html index.htm index.php;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
#    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /home/appdeploy/v1/website$fastcgi_script_name;
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}

Из того, что я вижу в вашей конфигурации, PHP больше не управляется, что вызывает загрузку страницы.

На рабочем здесь есть определение интерпретатора PHP:

location ~ \.php$ {
#    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /home/appdeploy/v1/website$fastcgi_script_name;
    include        fastcgi_params;
}

На новом нет специального параметра для php-страниц. Только для корня по умолчанию:

location / {
    uwsgi_pass  django;
    include     /home/appdeploy/v1/website/uwsgi_params; # the uwsgi_params file you             installed
}

Если вместо этого вы попробуете эту конфигурацию, она должна работать:

    location / {
    #uwsgi_pass  django;
    fastcgi_pass   127.0.0.1:9000;
    include     /home/appdeploy/v1/website/uwsgi_params; # the uwsgi_params file you             installed
}

(убедитесь, что процесс fastcgi прослушивает порт 9000. Если он использует сокет, укажите путь к сокету вместо 127.0.0.1:9000). Сообщите нам, все ли с этим работает.

Часть 2

Как управляется ваш процесс phpcgi через файл (сокет) или сокет веб-порта?

Я кое-что пропустил в вашем посте, конфигурацию nginx;

upstream django {
# server unix:///home/appdeploy/uwsgi-tutorial/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

Выполните lsof -i: 8001, если что-то слушает, это должен быть процесс fastcgi.

Если да, можете ли вы попробовать эту конфигурацию (добавить ее, если она не отображается в конфигурации nginx)?

location ~ \.php$ {
fastcgi_pass   127.0.0.1:8001;
fastcgi_index  index.php; 
# or your index name
fastcgi_param  SCRIPT_FILENAME  /home/appdeploy/v1/website$fastcgi_script_name;
include        fastcgi_params;
}

В противном случае ваш сервер может использовать сокет cgi. Вы можете проверить, существует ли файл сокета:

ps aufx | grep mysite.sock

В этом случае раскомментируйте первую строку в восходящем потоке и закомментируйте вторую строку:

upstream django {
server unix:///home/appdeploy/uwsgi-tutorial/mysite/mysite.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

И измените предыдущий блок php для:

location ~ \.php$ {
fastcgi_pass   django;
fastcgi_index  index.php; 
# or your index name
fastcgi_param  SCRIPT_FILENAME  /home/appdeploy/v1/website$fastcgi_script_name;
include        fastcgi_params;
}

Эти сокеты должны быть запущены, проверьте, находятся ли они в папке /etc/init.d/

Сообщите мне, сработало ли это.

Я думаю, что проблема здесь в ваших записях конфигурации server_name, в которых указывается имя домена, которое должно быть сопоставлено для использования конкретной конфигурации.

Конфигурация по умолчанию с PHP применяется только к localhost, тогда как конфигурация Django применяется к указанному вами IP-адресу.

Я предполагаю, что вы хотите запустить PHP / Django на том же виртуальном хосте / веб-сайте. Затем вам нужно применить блок местоположения PHP в той же конфигурации, что и конфигурация Django, а затем убедиться, что ваш параметр server_name либо закомментирован, либо соответствует домену вашего веб-сайта.

Затем вам нужно отключить другую конфигурацию.