Nginx

將 2 個 url 指向 nginx 伺服器上的同一站點

  • April 27, 2017

我們的這個網站已經執行良好,但我的任務是將另一個 url 指向同一個網站。這個想法是兩個 url 將顯示在地址欄中,但只會顯示一個站點。

我向我的 DNS 管理站點添加了一條 A 記錄,以將新域名指向我的舊站點所在伺服器的 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

我認為這樣做可能更有意義:

  • 為您的 HTTP 站點設置一個最小的伺服器塊,它(很可能)只會重定向到 HTTPS
  • 並為您的 HTTPS 站點設置伺服器塊

此外,您可能需要考慮是否要擁有一個或兩個 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 來啟用站點 - 我知道您目前有兩個文件。

這可能與您的問題無關,但在這裡,刪除不必要的東西也無妨。

引用自:https://serverfault.com/questions/846530