Как правильно настроить Nginx для работы с подсайтами?

Привет! Можете ли подсказать, как правильно настроить 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...
  • 3 октября 2024 г. 12:54
Ответы на вопрос 3
Для настройки 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
  ```

Это основная настройка, которую вы можете адаптировать под свои нужды, в зависимости от особенностей ваших сайтов.
/bugs будет обрабатываться первым локейшеном, потому что во втором у вас зачем-то завершающий слэш. 

Хотите сделать заглушку - просто добавьте return 200 OK; .
замените, на  это 

location /bugs/ {
          alias /home/pi/flyspray/;
          index index.html;
    }


обращаю внимание, на завершающий слэш, nginx ищет урлы по регулярке

с root, путь до index.html: /home/pi/flyspray/bugs/index.html

nginx.org/en/docs/beginners_guide.html
Похожие вопросы