nginx - 与 nginx 配置中的位置 block 作斗争

标签 nginx

我从 slicehost 上得到了一个新的切片,用于玩弄和学习 nginx 以及更多有关部署的一般知识。我在那里安装了一个 ruby​​ 应用程序(我将其称为 app1),它使用乘客。我将其设置为该服务器的默认应用程序,并在我的 nginx 配置中使用以下服务器 block :

server {
    listen 80;
    server_name <my server ip>;
    root <path to app1 public folder>;
    passenger_enabled on;
}

这很好用。然而,我想在这个切片上尝试一些不同的应用程序,所以我想我会像这样设置它:

http:///app1

http:///app2

等等。我想我可以通过添加一个位置 block 并将 app1 特定的内容移入其中来做到这一点,如下所示:

server {
    listen 80;
    server_name <my server ip>;

    location ^~ /app1 {
        root <path to app1 public folder>;
        passenger_enabled on;
    }
}

但是,在执行此操作(当然还要重新启动 nginx)时,转到普通 IP 地址会显示“欢迎使用 nginx”消息(这是我所期望的)。但是,转到/app1 会出现错误消息:

404 Not Found
The requested URL /app1 was not found on this server. 

这与我转到该 IP 上的另一个路径(例如/foo:)时收到的错误消息不同:

404 Not Found
nginx/0.8.53

所以,就像 nginx 知道该位置,但我没有正确设置它。谁能帮我纠正一下吗?我应该设置不同的服务器 block 而不是使用位置吗?我确信这很简单,但无法解决。

干杯,最大

最佳答案

您所追求的是名称虚拟主机。这个想法是,每个域托管在同一 IP 上,nginx 根据浏览器发送的 HTTP 请求中的 Host: header 选择要提供服务的虚拟主机。

要使用名称虚拟主机,请在 server_name 指令中使用您想要提供服务的域,而不是服务器的 IP。

server {
  listen 80;
  server_name app1.com;

  location / {
    root /srv/http/app1/public;
    passenger_enabled on;
  }
}

然后,要在同一个盒子上托管更多应用程序,只需为每个应用程序声明一个单独的 server { } block 即可。

server {
  listen 80;
  server_name app2.com;

  location / {
    root /srv/http/app2/public;
    passenger_enabled on;
  }
}

我使用 unicorn 而不是乘客,但结构的虚拟主机部分对于任何后端都是​​相同的。

全局 nginx 配置(在其自己的主机上什么也没有):https://github.com/benhoskings/babushka-deps/blob/master/nginx/nginx.conf.erb

每个虚拟主机的模板包装器:https://github.com/benhoskings/babushka-deps/blob/master/nginx/vhost.conf.erb

unicorn 虚拟主机详细信息:https://github.com/benhoskings/babushka-deps/blob/master/nginx/unicorn_vhost.common.erb

关于nginx - 与 nginx 配置中的位置 block 作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184342/

相关文章:

nginx - 如何强制 Nginx 针对上游服务器 block 中存在的主机名验证上游证书?

testing - nginx 将 rewrite_log 存储在哪里?

linux - Fedora 20 systemctl nginx 权限被拒绝

AngularJS、Nodejs 和 Nginx 应用程序在尝试访问端点时返回 404

django - 使用 Docker-Compose 和 nginx-proxy 时出现 502 Bad Gateway 错误

Nginx 记录查询 header 大小或 cookies 大小

php - 全新安装时出现 "Error in exception handler"

ruby-on-rails - 如何用不同的用户运行nginx主进程

redirect - Nginx 将所有 [http/www/https www] 重定向到 [https non-www]

php - docker-compose 中的代码接收 - 无法连接到 Webdriver