【问题标题】:nginx subdomain configuration example.com/blognginx子域配置example.com/blog
【发布时间】:2018-12-22 22:17:23
【问题描述】:

昨天和今天我花了一整天的时间学习 nginx 的工作原理,我得到了两个不同的域,一个使用 Ghost 博客平台和一个静态页面(未来的 NodeJS 应用程序),现在我正在尝试设置子域,但是我有点沮丧,因为我觉得我快到了,但它不起作用......这是我目前的设置:

#Main Domain
server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    root /var/www/portfolio;
    index index.html;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
#        proxy_pass http://127.0.0.1:2222;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}


#Sub domain
server {
    listen 80;
    listen [::]:80;

    server_name example.com/blog;
    root /var/www/ghost/system/nginx-root;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

这个想法是创建 mysite.com/blog 最终 mysite 将成为一个 nodejs 应用程序,稍后链接路由将是另一个问题,但是......一次一个大声笑,我怎样才能建立那个子域? 如果我将配置文件分成一个单独的文件,我会让另一个域工作:/

谢谢

编辑:我发现在 AWS 上使用 S3 中的存储桶我可以完成它,但现在我不需要它来做我正在做的事情 jeje,但很高兴知道。

【问题讨论】:

  • example.com/blog 不是子域.. blog.example.com 将是
  • 您需要做的是创建一个example.com 服务器块,然后定义location /blog 并在传递给应用服务器之前进行重写。

标签: node.js nginx subdomain ubuntu-16.04 ghost


【解决方案1】:

首先:它不是一个子域,而是一个名为 blog 的子文件夹。

如果您想运行两个应用程序,其中一个应用程序出现在子文件夹中,您可以执行以下操作

定义两个上游/代理将它们传递到不同的端口

然后将它们放在同一个配置文件中

有两个位置块(位置/和位置/博客)

这有意义吗?否则一个人可能会影响另一个人。

【讨论】:

  • 但它不在子文件夹中,现在它们有差异文件夹:都在 www,所以在 /var/www 我有 site1Folder 和 site2Folder。我应该把一个放在另一个里面吗?
  • 不,对 nginx 来说它们在哪里没关系,它们需要传递到应用程序运行的端口。
  • 如何定义两个上游,我选择随机端口?例如:proxy_pass127.0.0.1:2368;和proxy_pass 127.0.0.1:2223; ?
  • 您需要让您的节点应用程序在 2222(根据当前配置)上运行,而在另一个节点/幽灵上运行。与例如 php 不同,文件可以坐在那里等待服务器执行它们。这有意义吗?
  • 如果我将端口定义为:proxy_pass 127.0.0.1:2222;它说: 502 Bad Gateway 。我必须在命令行中更改某些内容吗?打开那个端口还是什么?如果是这样,如何? sudo ufw 允许 2222 吗?
【解决方案2】:

注意:这不是一个完整的答案,您可能需要修改一下

正如@Jonathan 所说,从 nginx 的角度来看,这是同一个站点,但您需要 nginx 以不同方式处理这两个位置。

这就是它的样子

server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    root /var/www/portfolio;
    index index.html;
    client_max_body_size 50m;

    location / {
      # your normal location settings
    }


    # your blog is defined here
    location /blog {
      root /var/www/ghost/system/nginx-root;

      # You'll probably need to do a rewrite here, because a
      # /blog/article needs to be passed as `/article` to the
      # app server

      # rewrite ^/blog/(.*) $1;

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_host;
      proxy_pass http://127.0.0.1:2368;
    }
  }
}

【讨论】:

  • 我将更好地研究 nginx 是如何工作的,因为我无法让它像那样工作。谢谢你
猜你喜欢
  • 2012-03-03
  • 2012-04-11
  • 1970-01-01
  • 2018-12-19
  • 2013-07-08
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多