Указание 2 URL-адресов на один и тот же сайт на сервере nginx

У нас есть этот веб-сайт, который уже хорошо работает, но мне поставили задачу указать другой URL-адрес на тот же самый сайт. Идея состоит в том, что в адресной строке будут отображаться два URL-адреса, но будет отображаться только один сайт.

Я добавил A-запись на свой сайт управления DNS, чтобы указать новое доменное имя на IP-адрес сервера, на котором мой старый сайт находится и получил традиционную страницу с надписью

«Добро пожаловать в nginx! Если вы видите эту страницу, ...»

Итак, исследуя, как настроить свой сервер, я наткнулся на этот сайт , что выглядело многообещающим и делало задачу достаточно простой.

Итак, я скопировал свой сервер {...} в свой / etc / nginx / sites-available / beta.conf и в моем / etc / nginx / sites-enabled / beta. conf (обратите внимание, что единственное различие между блоками server - это server_name ).

nginx.conf:
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
     gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;


    }
}

default:
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }
}

upstream beta_app_server {
    server unix:/home/beta/run/gunicorn.sock fail_timeout=0;
}

server {
    listen   80;
    server_name beta.portal.barefootretirement.com;

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/beta.portal.barefootretirement.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/beta.portal.barefootretirement.com/privkey.pem;

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }

    client_max_body_size 4G;

    access_log /home/beta/logs/nginx-access.log;
    error_log /home/beta/logs/nginx-error.log;

    location /static/ {
        alias   /home/beta/static/;
    }

    location /media/ {
        alias   /home/beta/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://beta_app_server;
            break;
        }


    }
}

server {
    listen   80;
    server_name beta.gowealthpoint.com;

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/beta.portal.barefootretirement.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/beta.portal.barefootretirement.com/privkey.pem;

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }

    client_max_body_size 4G;

    access_log /home/beta/logs/nginx-access.log;
    error_log /home/beta/logs/nginx-error.log;

    location /static/ {
        alias   /home/beta/static/;
    }

    location /media/ {
        alias   /home/beta/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://beta_app_server;
            break;
        }


    }
}

Я иду проверить, будет ли эта конфигурация работать с

sudo nginx -t

, но я получаю эти предупреждения

nginx: [warn] conflicting server name "beta.gowealthpoint.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "beta.gowealthpoint.com" on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

, и когда я пытаюсь перезапустить сервер

service nginx restart

, происходит сбой.

Ни в одном месте не осталось временных файлов. Проверял с помощью

ls -lah

Понятно, что что-то делаю не так, но не знаю что. Любая помощь будет принята с благодарностью.

0
задан 23 May 2017 в 15:41
3 ответа

Если nginx -t работает корректно, но перезапуск nginx не удаётся, то может произойти запуск процесса nginx без корректного PID-файла.

Это означает, что остановка процесса nginx не удаётся, а когда система пытается его запустить, он не удаётся, потому что он уже запущен. В этом случае nginx всё ещё использует старую конфигурацию.

Попробуйте service nginx stop, проверьте, запущен ли nginx командой ps. Если он все еще работает, используйте kill, чтобы остановить его, а затем попробуйте service nginx start.

.
1
ответ дан 4 December 2019 в 16:16

Я думаю, что может быть более разумным:

  • иметь один минимальный серверный блок для вашего HTTP-сайта, который (скорее всего) только будет перенаправлен на HTTPS
  • и иметь серверный блок для вашего HTTPS-сайта

Кроме того, вы, возможно, захотите рассмотреть вопрос о том, хотите ли вы иметь один HTTPS-сайт или два (i). e. по одному для каждого из ваших доменов) - другими словами, вы можете иметь оба блока HTTP-сервера в виде:

server {
    listen   80;
    server_name beta.barefootretirement.com beta.gowealthretirement;
    return 301 https://beta.barefootretirement.com$request_uri;
}

или вы можете создать аналогичный блок для обработки HTTPS-запросов для обоих доменов (в зависимости от ваших потребностей).

Я не совсем понимаю, что именно является причиной вашей проблемы (и не могу сейчас в этом разобраться), но я думаю, что сокращение избыточности в вашей конфигурации, конечно же, не повредит. Итак, я сделал дубликат моего сервера... } в моем /etc/nginx/sites-available/beta.conf и в моем /etc/nginx/sites-enabled/beta.conf

Одна маленькая вещь в этом комментарии: в общем, вы редактируете сайт-доступный файл, и делаете сайт включенным путем симлинкования этого файла в /etc/nginx/sites-enabled - я понимаю, что в настоящее время у вас есть два файла.

Это, вероятно, не имеет отношения к вашей проблеме, но и здесь не повредит удалить ненужные вещи.

0
ответ дан 4 December 2019 в 16:16

Почему бы просто не сделать это?

server {
    server_name beta.portal.barefootretirement.com beta.gowealthpoint.com;
    listen 80;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/beta.portal.barefootretirement.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/beta.portal.barefootretirement.com/privkey.pem;

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }

    client_max_body_size 4G;

    access_log /home/beta/logs/nginx-access.log;
    error_log /home/beta/logs/nginx-error.log;

    location /static/ {
        alias   /home/beta/static/;
    }

    location /media/ {
        alias   /home/beta/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://beta_app_server;
            break;
        }


    }
}

Все, что вам нужно, это одна серверная директива с обеими именами серверов в одной строке... Также, если операторы обычно не рекомендуются из соображений производительности, лучше сделать:

server {
    server_name beta.portal.barefootretirement.com beta.gowealthpoint.com;

    listen 80;
    listen [::]:80;

    return 301 https://$server_name$request_uri;
}

server {
    server_name beta.portal.barefootretirement.com beta.gowealthpoint.com;

    listen 443 ssl;
    listen [::]:443 ssl;
    ssl_certificate /etc/letsencrypt/live/beta.portal.barefootretirement.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/beta.portal.barefootretirement.com/privkey.pem;

    client_max_body_size 4G;

    access_log /home/beta/logs/nginx-access.log;
    error_log /home/beta/logs/nginx-error.log;

    location /static/ {
        alias   /home/beta/static/;
    }

    location /media/ {
        alias   /home/beta/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://beta_app_server;
            break;
        }


    }
}
0
ответ дан 4 December 2019 в 16:16

Теги

Похожие вопросы