У нас есть этот веб-сайт, который уже хорошо работает, но мне поставили задачу указать другой URL-адрес на тот же самый сайт. Идея состоит в том, что в адресной строке будут отображаться два URL-адреса, но будет отображаться только один сайт.
Я добавил A-запись на свой сайт управления DNS, чтобы указать новое доменное имя на IP-адрес сервера, на котором расположен мой старый сайт, и получить традиционную страницу с надписью
«Добро пожаловать в nginx! Если вы видите эту страницу ...»
Итак, исследуя, как настроить свой сервер, я наткнулся на этот сайт что выглядело многообещающе и делало задачу достаточно простой.
Так что я сделал дубликат моего server { ... }
в моем /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
Понятно, что я что-то делаю не так, но не знаю что. Любая помощь будет принята с благодарностью.
Если nginx -t
работает правильно, но перезапуск nginx завершается неудачно, значит, процесс nginx может работать без правильного файла PID.
Это означает, что остановить процесс nginx не удается, а когда система пытается его запустить, происходит сбой, потому что он уже запущен. В этом случае nginx по-прежнему использует старую конфигурацию.
Пытаться service nginx stop
, проверьте, работает ли nginx с ps
команда. Если он все еще работает, используйте kill
остановить это и попробовать service nginx start
после этого.
Почему бы просто не сделать это?
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;
}
}
}
Думаю, имеет смысл:
Кроме того, вы можете подумать, хотите ли вы иметь один сайт HTTPS или два (то есть по одному для каждого из ваших доменов) - другими словами, у вас могут быть оба блока 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 - я понимаю, что в настоящее время у вас есть два файла.
Вероятно, это не имеет отношения к вашей проблеме, но и здесь не помешает удалить ненужные вещи.