gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:11:40 28 4
gpt4 key购买 nike

我从 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com