Слушайте только ОДИН субдомен и ОДИН порт

Мне нужно узнать, как слушать только одну комбинацию порт-хост и возвращать 404 на каждый другой запрос.

Мой пример:

Я настроил субдомен для owncloud, который использует SSL и прослушивает порт 12345 вместо 443. Предположим, что этот субдомен — oc.example.com. Поэтому я хочу, чтобы nginx только слушал https://oc.example.com:12345 но не

Если кто-то запрашивает какой-либо ресурс, который не соответствует точно https://oc.example.com:12345, возникает ошибка (например, 404 not found) должны быть возвращены, иначе сервер просто не должен отвечать.

Моя конфигурация пока выглядит так:

server {
    # I think there's something wrong here?
    listen 12345;
    server_name oc.example.com;
    ssl on;

    ssl_certificate /etc/ssl/nginx/owncloud/owncloud.crt;
    ssl_certificate_key /etc/ssl/nginx/owncloud/owncloud.key;

    add_header Strict-Transport-Security max-age=31536000;
    add_header X-Frame-Options DENY;

     # Path to the root of your installation
    root /var/some/path/to/my/owncloud/;

    client_max_body_size 10G; # set max upload size
    fastcgi_buffers 64 4K;

    rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
    rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
    rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

    index index.php;
    error_page 403 = /core/templates/403.php;
    error_page 404 = /core/templates/404.php;

    ... here are the definitions of my locations
}

Я прочитал документацию и обнаружил, что nginx сначала ищет правильное определение сервера по номеру порта. Если совпадений несколько, имя_сервера используется для поиска правильного определения. Но у меня есть только одно определение!

Кто-нибудь знает, как решить проблему?


person Simon Hessner    schedule 24.10.2014    source источник


Ответы (1)


nginx проверяет заголовок хоста и выбирает соответствующий виртуальный хост. Чтобы он отбрасывал все остальное, просто добавьте 'catch-all' с помощью директивы default_server:

server {
  listen 80 default_server; 
  return 404;
}

все запросы к oc.example.com:X, кроме 12345, будут отброшены по умолчанию, поскольку вы не определили другие виртуальные хосты, прослушивающие другие порты.

person VF_    schedule 25.10.2014