Как настроить прослушивание портов 80/443 только для основного доменного имени, исключая поддомены?

Как настроить сервер Nginx таким образом, чтобы при обращении к `api.example.com` запросы не направлялись в Nginx, а вместо этого сервер Golang был доступен на бэкенд-сервере. Нужно убедиться, что запросы к `api.example.com` не обрабатываются Nginx и направляются прямо на сервер Golang.
  • 22 августа 2024 г. 12:14
Ответы на вопрос 3
1. Для настройки прослушивания портов 80/443 только для основного доменного имени без поддоменов в Nginx можно использовать следующий конфигурационный файл:

```bash
server {
    listen 80;
    server_name example.com;
    
    location / {
        # настройки обработки запросов для основного доменного имени
    }
}

server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    location / {
        # настройки обработки защищенных запросов для основного доменного имени
    }
}
```

Этот конфигурационный файл ограничит прослушивание портов 80/443 только для основного доменного имени `example.com`, и исключит поддомены.

2. Для настройки сервера Nginx таким образом, чтобы при обращении к `api.example.com` запросы не обрабатывались им, а направлялись на сервер Golang на бэкенд-сервере, можно использовать следующий конфигурационный файл:

```bash
server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://backend_server_ip:backend_server_port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
```

Этот конфигурационный файл настроит сервер Nginx для проксирования запросов, поступающих на `api.example.com`, на бэкенд-сервер Golang по указанному IP и порту. Важно убедиться, что сервер Golang настроен правильно и готов принимать запросы от Nginx.
На том же самом 443 порту прослушать не получится, потому придётся прослушивать на отдельном, и проксировать через nginx. 
Нужно добавить отдельный блок server для поддомена (или несколько блоков), но со своими настройками и без default_server. Не старые блоки заменить, а дописать новые. Что-то вроде этого:
server {
    listen [::]:80;
    listen 80;

    server_name api.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen [::]:443 ssl;
    listen 443 ssl;
    http2  on;
    server_name api.example.com;
    ssl_certificate путь_к_серту_для_api.example.com;
    ssl_certificate_key путь_к_ключу_для_api.example.com;
    location / {
        proxy_pass 127.0.0.1:порт_вашего_приложения;
        ........
        ........
    }
}
А куда вы хотите попадать, если не в nginx? 

Заведите дефолтный серверный блок, в котором настройке проксирование куда вам нужно.
Похожие вопросы