Привет! Можете ли подсказать, как правильно настроить Nginx, используя один конфигурационный файл? Мне нужно настроить автоматическое перенаправление HTTP на HTTPS. На адресе <b>mysite/</b> расположен сайт 1, который работает как прокси на порт 8000 к другому веб-серверу. На адресе <b>mysite/bugs</b> размещается сайт 2, разработанный на PHP и использующий сокет /var/run/php/php-fpm.sock. Однако в целях тестирования на данный момент я временно заменил сайт 2 на файл index.html. Всем файлам и папкам сайта 2 я назначил владельца и группу www-data.
Я пытаюсь настроить файл /etc/nginx/sites-available/mysite, после чего создаю символическую ссылку, проверяю конфигурацию на наличие ошибок и перезапускаю Nginx. Мой текущий конфигурационный файл выглядит следующим образом:
<pre><code class="nginx">server {
listen 80;
listen [::]:80;
server_name mysite.org;
return 301 https://mysite.org$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443;
server_name mysite.org;
access_log /var/log/nginx/mysite.org-access.log;
error_log /var/log/nginx/mysite.org-error.log;
keepalive_timeout 60;
ssl_certificate /etc/letsencrypt/live/mysite.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.org/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:EC..........................................
ssl_dhparam /etc/ssl/certs/dhparam.pem;
add_header Strict-Transport-Security 'max-age=604800';
location / {
proxy_pass http://localhost:8000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location /bugs/ {
root /home/pi...
Для настройки Nginx с подсайтами, где один из сайтов работает как прокси и другой — как PHP-приложение, можно использовать следующий пример конфигурации. В этом случае мы добавим обработку запросов к `/bugs/`, как вы уже упоминали. Я приведу полный пример конфигурационного файла с учётом автоматического перенаправления HTTP на HTTPS и настройки двух расположений.
```nginx
server {
listen 80;
listen [::]:80;
server_name mysite.org www.mysite.org;
# Перенаправление HTTP на HTTPS
return 301 https://mysite.org$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443;
server_name mysite.org www.mysite.org;
access_log /var/log/nginx/mysite.org-access.log;
error_log /var/log/nginx/mysite.org-error.log;
ssl_certificate /etc/letsencrypt/live/mysite.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.org/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5';
ssl_dhparam /etc/ssl/certs/dhparam.pem;
add_header Strict-Transport-Security 'max-age=604800; includeSubDomains; preload' always;
location / {
proxy_pass http://localhost:8000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location /bugs/ {
# Указываем, что /bugs/ является каталогом с файлами
alias /path/to/your/bugs/; # Укажите правильный путь
index index.html; # Замените на index.php, когда будет доступен сайт 2
try_files $uri $uri/ =404;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
}
```
### Пояснения:
1. **HTTP на HTTPS**: Первые настройки обработчика (listen 80) настроены для перенаправления всех запросов с HTTP на HTTPS.
2. **SSL**: Настройка SSL, включая указание сертификатов и параметров безопасности.
3. **Основной сайт (proxy_pass)**: Запросы к корню (location /) перенаправляются на локальный сервер, работающий на порту 8000.
4. **Сайт 2**: Для `/bugs/` мы используем `alias`, указывая путь к файлам вашего второго сайта. Сначала там будет `index.html`, а затем можно заменить на `index.php`.
5. **PHP-обработка**: Используется блок `location ~ \.php$`, чтобы обработать PHP-файлы через `php-fpm`.
### Советы:
- Проверьте, что пути к сертификатам, сокету php-fpm и к папке с сайтом 2 указаны правильно.
- После внесения изменений проверьте конфигурацию на наличие ошибок с помощью команды:
```bash
sudo nginx -t
```
- Перезапустите Nginx:
```bash
sudo systemctl restart nginx
```
Это основная настройка, которую вы можете адаптировать под свои нужды, в зависимости от особенностей ваших сайтов.
<code>/bugs</code> будет обрабатываться первым локейшеном, потому что во втором у вас зачем-то завершающий слэш. <br/> <br/> Хотите сделать заглушку - просто добавьте <code>return 200 OK;</code> .
замените, на это <br/> <br/> <pre><code class="nginx">location /bugs/ {
alias /home/pi/flyspray/;
index index.html;
}</code></pre> <br/> <br/> обращаю внимание, на завершающий слэш, nginx ищет урлы по регулярке <br/> <br/> с root, путь до index.html: <b>/home/pi/flyspray/bugs/index.html</b> <br/> <br/> <a href="http://nginx.org/en/docs/beginners_guide.html" rel="nofollow">nginx.org/en/docs/beginners_guide.html</a>