Для настройки одновременной работы Django и PHP на одном сервере с использованием Nginx, вам нужно изменить конфигурацию Nginx так, чтобы он обрабатывал запросы к PHP-скриптам, параллельно с тем, как он обрабатывает запросы к специальным путям вашего Django-приложения.
### Шаги по настройке
1. **Убедитесь, что у вас установлен PHP-FPM:**
Убедитесь, что PHP-FPM (FastCGI Process Manager) установлен и работает. Это позволит Nginx передавать запросы к PHP-скриптам вашему PHP-приложению.
2. **Измените конфигурацию Nginx:**
Вам нужно добавить новую локацию для обработки PHP-скриптов. Например, предположим, что ваши PHP-скрипты находятся в каталоге `/var/www/php` (вы можете изменить этот путь на свой).
Вот пример исправленной конфигурации:
```nginx
server {
if ($host = www.mysite.ru) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = mysite.ru) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name www.mysite.ru mysite.ru;
location /media/ {
root /home/mysite/web;
}
location /favicon.ico {
alias /home/mysite/web/mysite/static/img/favicon.ico;
}
location /static/ {
root /home/mysite/web/mysite;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
# Обработка PHP-скриптов
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Путь к сокету PHP-FPM
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
return 301 https://www.mysite.ru$request_uri;
}
server {
listen 443 ssl;
server_name www.mysite.ru mysite.ru;
ssl_certificate /etc/letsencrypt/live/mysite.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.ru/privkey.pem; # managed by Certbot
location /media/ {
root /home/mysite/web/mysite;
}
location /favicon.ico {
alias /home/mysite/web/mysite/static/img/favicon.ico;
}
location /static/ {
root /home/mysite/web/mysite;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
# Обработка PHP-скриптов
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Путь к сокету PHP-FPM
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
### Объяснение изменений:
- **location ~ \.php$**: Этот блок конфигурации обрабатывает запросы к файлам с расширением `.php`.
- **fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;**: Указывает, что запросы к PHP-скриптам будут передаваться процессу PHP-FPM через сокет.
- **include snippets/fastcgi-php.conf;**: Это включает стандартную конфигурацию для обработки FastCGI.
- **fastcgi_param SCRIPT_FILENAME**: Указывает путь к самому PHP-скрипту.
### Перезагрузка Nginx
Не забудьте перезагрузить Nginx после внесения изменений в конфигурацию:
```bash
sudo systemctl restart nginx
```
### Дополнительные замечания
- Убедитесь, что у вас правильно настроены права на файл и каталоги ваших PHP-скриптов.
- Если вы используете разные домены или поддомены для вашего Django и PHP-приложений, вы можете дополнительно настроить конфигурацию для отдельных серверов.
- Проверьте журналы ошибок Nginx, если что-то не работает, это может дать подсказки о том, что нужно исправить.