【问题标题】:nginx config - forward http to https, forward www.domain.tld to domain.tld and two subdomainsnginx 配置 - 将 http 转发到 https,将 www.domain.tld 转发到 domain.tld 和两个子域
【发布时间】:2014-08-06 19:00:50
【问题描述】:

我正在尝试将 nginx 配置为:

http://www.domain.tld --> https://domain.tld
http://domain.tld --> https://domain.tld
http://api.domain.tld --> https://api.domain.tld

“www”-webroot 服务于静态 HTML (AngularJS),而 API 服务于一个 Node.JS 应用程序,该应用程序应该从 localhost:3000“上游”。我想我的方向是正确的,但它似乎对我不起作用。到目前为止,这是我所得到的:

upstream api_server {
    server              localhost:3000;
    keepalive           64;
}

server {
    listen 80;
    server_name         api.domain.tld;
    return 301          https://api.domain.tld$request_uri;
}

server {
    listen 80;
    server_name         *.domain.tld www.domain.tld;
    return 301          https://domain.tld$request_uri;
}

server {
    listen 443 ssl;
    server_name         api.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

location / {
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    Host $http_host;
    proxy_set_header    X-NginX-Proxy true;

    proxy_pass          http://api_server/;
    proxy_redirect      off;
}

server {
    listen 443 ssl;
    server_name         *.domain.tld www.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root /var/www/webroot/;
}

现在这些都在我的/etc/nginx/conf.d/domain.tld.conf 文件中。

任何帮助将不胜感激。


编辑:

我自己弄明白了(得到了 Tan Hong Tat 的一点帮助),所以这个例子已经更新了。

如果您有任何改进,请告诉我,我会更新它。

【问题讨论】:

  • 可能有用的是说我使用了 nginx 网站上的一些模板,但也许这是我一开始的错误。但是 nginx 重新加载说'OK'......

标签: node.js angularjs ubuntu nginx


【解决方案1】:

在 HTTP 的服务器块中将 HTTP 重定向到 HTTPS。删除 HTTPS 服务器块中的 listen 80

    server {
        listen 80;
        server_name         domain.tld www.domain.tld;
        return 301          https://domain.tld$request_uri;
    }
    server {
        listen 80;
        server_name         api.domain.tld;
        return 301          https://api.domain.tld$request_uri;
    }

    server {
        listen 443 ssl;
        server_name         domain.tld www.domain.tld api.domain.tld;

        location / {
            proxy_redirect off;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_set_header        Host $http_host;
            proxy_set_header        X-NginX-Proxy true;
            proxy_set_header        Connection "";
            proxy_http_version      1.1;
            proxy_cache             one;
            proxy_cache_key         sfs$request_uri$scheme;
            proxy_pass              http://domain_tld_api_server;
        }
    }

【讨论】:

  • 没有完全按照我的意愿工作,但它在正确的思维方向上得到了满足。感谢您的快速回复!
猜你喜欢
  • 2023-03-10
  • 2019-04-11
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2021-12-25
相关资源
最近更新 更多