У нас есть этот веб-сайт, который уже хорошо работает, но мне поставили задачу указать другой 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
Понятно, что что-то делаю не так, но не знаю что. Любая помощь будет принята с благодарностью.
Если nginx -t
работает корректно, но перезапуск nginx не удаётся, то может произойти запуск процесса nginx без корректного PID-файла.
Это означает, что остановка процесса nginx не удаётся, а когда система пытается его запустить, он не удаётся, потому что он уже запущен. В этом случае nginx всё ещё использует старую конфигурацию.
Попробуйте service nginx stop
, проверьте, запущен ли nginx командой ps
. Если он все еще работает, используйте kill
, чтобы остановить его, а затем попробуйте service nginx start
.
Я думаю, что может быть более разумным:
Кроме того, вы, возможно, захотите рассмотреть вопрос о том, хотите ли вы иметь один 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 - я понимаю, что в настоящее время у вас есть два файла.
Это, вероятно, не имеет отношения к вашей проблеме, но и здесь не повредит удалить ненужные вещи.
Почему бы просто не сделать это?
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;
}
}
}