Я новичок в настройке серверов, и у меня возникают проблемы с тем, чтобы 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). Сообщите нам, все ли с этим работает.
Как управляется ваш процесс 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 либо закомментирован, либо соответствует домену вашего веб-сайта.
Затем вам нужно отключить другую конфигурацию.