- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 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/
我是一名优秀的程序员,十分优秀!