node.js - 如何使用 ssl 和同一域名运行 api 和网站

标签 node.js ssl nginx https lets-encrypt

我有以下网站 nepherius.xyz,我想运行一个常规域和一个使用相同名称的 API,例如:

https://nepherius.xyz - 这将是常规网页 https://nepherius.xyz:8433 - 这将是 api

当前的nginx.conf,大部分由letsencrypt的certbot生成

server {

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name nepherius.xyz www.nepherius.xyz_;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        proxy_pass http://localhost:8433;
        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; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/nepherius.xyz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/nepherius.xyz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {
    if ($host = nepherius.xyz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;

    server_name nepherius.xyz www.nepherius.xyz_;
    return 404; # managed by Certbot


}
server {
    if ($host = www.nepherius.xyz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 ;
    server_name www.nepherius.xyz;
    return 404; # managed by Certbot

}

现在 API 工作正常但不是常规站点,如果我删除

    proxy_pass http://localhost:8433;
    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;

然后常规站点可以工作,但 API 不能。那么,我该如何让两者都发挥作用呢?

最佳答案

尝试创建两个服务器,例如:

server {
    listen       80;
    server_name  www.nepherius.xyz;
    ...
}

server {
    listen       8433;
    server_name  www.nepherius.xyz;
    ...
}

这些将有助于在不同端口使用您的域。

关于node.js - 如何使用 ssl 和同一域名运行 api 和网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50486993/

相关文章:

node.js - Nodejs Twit 和 Twitter API,如何更改用户?

node.js - 我已经安装了meteor - npm 在哪里?

perl - 如何将证书安装到 Perl 证书库? 401未经授权

ssl - 如何在 Ruby 1.9.3 上使用 hipchat-api 避免 SSL 错误?

node.js - 使用 NodeJS 和 express-fileupload 将文件上传到服务器,并将其直接流式传输到 Azure 云

javascript - 为什么 String.raw 不能以反斜杠结尾?

javascript - 没有中间证书的 SSL 会导致签名的 APK 无法加载外部 CSS/JS 吗?

nginx - 如何根据请求中的 Origin header 正确将 nginx Access-Control-Allow-Origin 设置到响应 header 中?

php - 具有多个位置 block 的 nginx 配置

regex - 如何在 nginx "if"正则表达式中使用变量