问题背景
假设有一台服务器,希望在上面启动三个应用程序,它们分别是:
- 官网首页,监听
80
端口 api
接口,监听1357
端口- 后台管理,监听
2468
端口
现在此三个应用程序都已启动,均可通过 IP + 端口
访问
其中,官网首页和管理后台都是纯前端的项目,build 之后就是一些静态页面,需要通过 nginx 进行寄宿,api 接口是一个后台应用,可以通过命令行直接启动。
此外,待映射的域名是 test.com
,希望可以分别通过以下三个地址来访问上面的三个服务:
www.test.com
api.test.com
admin.test.com
本篇博客来讨论如何通过 nginx 来完成上面的配置
通过监听不同端口来寄宿多个目录下的网站
nginx 安装成功之后,有一个 /etc/nginx/default
文件,主要内容如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
里面包含一个默认监听的 80
端口,映射道德文件夹是 /var/www/html
,所有要将官网服务 build
后放到这个目录下
现在来配置后台管理的端口和目录,在最下面加入以下配置
server {
listen 2468;
server_name _;
root /var/www/admin.test.com/;
}
然后把后台管理的相关文件放到 /var/www/admin.test.com/
目录下
运行以下命令来载入 nginx 的配置:
nginx -s reload
api
的应用自己启动就好了,无需 nginx 来寄宿。
到目前为止,通过 域名+ 端口
就能够访问到此三个服务了
www.test.com
, 官网api.test.com:1357
,api
接口admin.test.com:2468
, 后台管理
通过二级域名反向代理到指定端口下的服务
前提:让 admin.test.com
和 api.test.com
这两个子域名解析到服务器 IP 上,默认 www.test.com
已解析
nginx 除了作为 webserver 来寄宿静态网站以外,还有一个非常强大的功能就是反向代理
下面我们就来创建一个配置文件,将 api.test.com
的请求转发给 1357
端口下的应用程序,将 admin.test.com
的请求转发给 2468
端口下的站点
在 /etc/nginx/conf.d
目录下创建一个叫做 reverse_proxy.conf
的文件,文件名可以随意指定,但要以 .conf
为后缀名。然后加入下面的内容:
server {
listen 80;
server_name api.test.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:1357;
}
}
server
{
listen 80;
server_name admin.test.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:2468;
}
}
重新加载 nginx
配置后,即可直接通过域名访问服务
nginx -s reload
# 或者
service nginx restart
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于