nginx 通过不同的二级域名映射到不同端口下的应用

问题背景

假设有一台服务器,希望在上面启动三个应用程序,它们分别是:

  • 官网首页,监听 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:1357api 接口
  • admin.test.com:2468, 后台管理

通过二级域名反向代理到指定端口下的服务

前提:让 admin.test.comapi.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
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    297 引用 • 539 回帖 • 322 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
融合块、大纲和双向链接
构建你永恒的数字花园
思源笔记是一款本地优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步