(一) 实战环境配置:hosts文件+nginx模拟多域名

Erma60Q 3年前

来自: https://segmentfault.com/a/1190000004532670

学习前提

  • 你已经知道什么是SSO了

  • 了解域名解析流程与hosts文件的作用

  • 知道nginx代理的使用

  • 会启动一个web应用(python、java-web、php、node.js等等)

本系列着重于SSO的实现,涉及到的技术主要以推荐阅读呈现。如果你不懂前提提到的点,可粗略浏览本文后去学习下技术细节再回头看,千万不要似动非懂的。另外声明,本实战是用node.js + express4.x实现的。

hosts文件设置

我们约定如下几个域名:

  • id.vhost.com sso系统 负责验证登录、注册、修改公共用户信息

  • music.vhost.com 音乐应用 (同域)

  • note.com 日记应用(跨域)

添加如下内容:

127.0.0.1    id.vhost.com  127.0.0.1    music.vhost.com  127.0.0.1    note.com

nginx代理设置

我们约定这三个server在127.0.0.1上的端口

  • id.vhost.com --> 127.0.0.1:3000

  • music.vhost.com --> 127.0.0.1:3001

  • note.com --> 127.0.0.1:3002

这里放一个参考配置代码,文件id.vhost.com.conf:

  1 server {    2     listen  80;    3     server_name id.vhost.com;    4     charset utf-8;    5     access_log /var/log/nginx/id.vhost.com.log main;    6     location / {    7         proxy_set_header X-Real-IP $remote_addr;    8         proxy_set_header X-Forwarded-For $proxy_add_x_forwarde    d_for;    9         proxy_set_header Host $http_host;   10         proxy_set_header X-NginX-Proxy true;   11    12         proxy_pass http://127.0.0.1:3000;   13     }   14 }

其余两个自行配置

项目初始化

使用 Express Generator 来生成项目

express -e --git id    // 我们使用ejs前端模板,同时添加.gitignore文件  express -e --git music  express -e --git note

这样项目就生成完毕了!接下来修改启动端口。修改每个项目的bin/www文件中的端口设置。分别为3000、3001、3002(上面已经说了)

var port = normalizePort(process.env.PORT || '3000');

然后分别启动三个项目、以及nginx。在浏览器中访问id.vhost.com、music.vhost.com、note.vhost.com。 如果都成功,配置就完成了!这样,我们就在本地模拟出了跨域。

反馈

  • 请支出错误之处、不足需要补充之处好让我进行修改!

  • 大胆说出你的疑问!