我有一份新工作,他们在 AWS 上设置了一切。我们有一个测试服务器,它托管了许多应用程序。
如果我去
jenkins.example.com
它进入我们正在运行的 Jenkins 实例。
如果我去
server.test.example.com
然后它进入我们的应用程序的测试版本。
这个配置在哪里(不同的“子域”使用不同的应用程序)?是在 Nginx 中,还是在 DNS 条目中?还是两者都有,还是在其他地方?
(我不是 100% 确定我应该使用哪些术语来提出这个问题,例如“子域名”,请随时告诉我它们是什么)。
答案1
这取决于你想做什么。
您所问的可能需要 Nginx,而不是添加 DNS 条目。
CNAME DNS 条目可以将某些子域重定向到特定域(但不能直接重定向到服务器上的特定 IP 地址或端口)。如果您要映射子域,则只需使用 CNAME 将请求重定向到其他域名(即 subdomain.exampleone.com 指的是 exampletwo.com)。
Nginx 可以充当反向代理,获取子域并将其重定向到服务器上的特定文件夹/文件或端口。这可以从您的/etc/nginx/nginx.conf
*、http {...}
块内或目录中进行配置,您可以在其中为每个重定向(隐含的位置)/etc/nginx/sites-enabled/
创建一个单独的文件。http {...}
*或你的 nginx 目录所在的位置
这种重定向(到特定端口上的应用程序)的正确格式如下/etc/nginx/nginx.conf
:
server {
# whether you type localhost or 127.0.0.1 or something else here
# depends on your servers /etc/hosts file, where you define how
# the server refers to itself
listen localhost:80;
server_name mysubdomain.example.com;
location / {
proxy_pass http://localhost:MYPORTNUMBER
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
其中,您将 MYPORTNUMBER 替换为应用程序正在运行的端口。重定向到静态文件的过程类似,但您不需要执行 proxy_pass,而是执行root /path/to/desired/folder
。
我还没有专门尝试过,但这应该适用于像server.test.ourdomain.com
您示例中那样的多级子域。