怎么用nginx配置一级域名作为网站访问,二级域名作为express服务启动?

在服务器上已经用pm2配置好express项目了,并且能成功启动,express的node端口是3000
现在通过访问http://132.232.193.33:3000/about 已经能看到对应node api下的数据了,我的nginx目前是这样的:

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  csdoker.com;
    root         /var/www/vue-blog-server/;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

这个只配置了vue-blog-server这个express项目,现在我想再配置一个vue-blog的前端项目,该怎么配呢?
最后我想达到的效果是,访问一级域名csdoker.com 指向到vue-blog项目index.html,访问二级域名api.csdoker.com/about 得到express项目的数据

目前在腾讯云上的DNS记录是这样的:图片描述

是不是还需要添加一条二级域名的记录,比如这样?

  • 主机记录:api
  • 记录类型:A
  • 线路类型:默认
  • 记录值:132.232.193.33
阅读 6k
2 个回答

因为你采用了域名系统,所以这个相对更容易一些你需要在nginx配置多个主机服务绑定到不同的域名中,大致为

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    # 这里是一级域名名称对应服务
    server_name  csdoker.com www.csdoker.com;
    root         /var/www/vue-blog/;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        # 这里配置你vue-blog前端项目反向代理地址,这里假设是4000,如果前端项目部需要代理则这里可以不用,因为你已经设置了root 地址,它可以基于文件提供基本的静态html服务
        proxy_pass http://127.0.0.1:4000;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}
server {
    listen       80;
    listen       [::]:80;
    # 这里是二级域名名称对应服务
    server_name  api.csdoker.com;
    root         /var/www/vue-blog-server/;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

关于域名,则你只需要设置两条a记录,一个是一级域名的,一个是二级域名的,当前都指向你的服务主机。
这样nginx可以根据访问的域名自动匹配去提供不同的服务
注意这样直接利用ip访问(而不是域名访问)则默认会访问到先加载的对80端口的监听

域名解析正确

nginx配置如下,需要两个server,因为是两个域名

# 主域名
server {
    listen 80;
    server_name csdoker.com;
     root         /var/www/vue-blog-server/;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
}
# 子域名
server {
    listen 80;
    server_name api.csdoker.com;
    location / {
        proxy_pass http://localhost:3000;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题