將 2 個 url 指向 nginx 伺服器上的同一站點
我們的這個網站已經執行良好,但我的任務是將另一個 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 來啟用站點 - 我知道您目前有兩個文件。
這可能與您的問題無關,但在這裡,刪除不必要的東西也無妨。