簡體   English   中英

(NGINX) NodeJS 反向代理子域

[英](NGINX) NodeJS Reverse Proxy Subdomain

這個問題可能被問了很多,但我似乎找不到一個真正有效的真正簡單的解決方案。 我需要幫助來設置它。

我將列出我當前的環境,以便您快速了解:

  • 服務器主機:HETZNER雲服務器
  • 域名托管服務商:Webhuset.no(DNS 記錄在這里)
  • 操作系統:CentOS 7 (Hetzner)
  • 網站:使用 NodeJS 反向代理運行 NGINX
  • DNS:我沒有在我的 DNS 記錄中添加 *.domain.example,因為我不希望每個子主機都添加到我的服務器。
  • SSL:啟用,使用 Let's Encrypt Certbot。

我只運行一個站點,當然,不同的內容有不同的頁面(不是多個站點)

我的目標是擁有類似於 CPanel-subdomains 的東西。 我可以在哪里添加admin.domain.example並將其設置為例如domain.example/admin而無需重定向。

但是我發現這比預期的要難,因為我現在閱讀了這么多論壇帖子和這么多文檔,但我無法讓它發揮作用。

我已經足夠了解子域必須在 Nginx 中配置。 在此之前,我一直嘗試在 nodejs 配置中執行此操作。

我當前的nginx.conf使我的域example.domain使用 SSL 直接進入我網站的根文件夾。 這工作正常。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    server {
        server_name example.domain www.example.domain;
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

        listen [::]:443 ssl ipv6only=on;
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/example.domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.domain/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    }
}

在這里,我假設我必須添加一個服務器塊才能使admin.example.domain路由到example.domain/admin

我怎樣才能做到這一點並仍然保持 SSL? 我需要 SSL 才能使圖像呈現。 我曾嘗試添加這樣的服務器塊:

 server {
    server_name admin.example.domain

    location / {
        proxy_pass http://127.0.0.1:3000/admin;
    }

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.domain/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

如果這行得通(除非我監聽端口 80 並使用 http://) ,否則它只會將我重定向到(不安全) https://admin.example.domain/admin

和我剛才做的一樣的每個人都會讓它工作。 但我沒有。 有什么不同,我該如何解決這個問題?

解決方案

  • 為我想要的每個子域創建一個服務器塊,並將目錄放在 proxy_pass 中(保存並重新啟動/重新加載 nginx 配置)
  • 運行 certbot --nginx
  • 從 certbot 列表中選擇子域
  • 通過配置和繁榮它按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM