展开目录
nginx域名映射目录的配置方法
nginx
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

因为本地存在多个不同域名的项目,为了与线上情况基本一致,所以需要让这些项目共享80端口,仅以不同域名来区分访问的代码路径。

nginx.conf命令配置一个静态文件服务器的最基本写法如下:

server {
   listen 80; # 监听端口
   server_name site.com; # 域名
   root /website/site/public; # 服务器代码根目录
}

上述配置表示了80端口只对应一个域名 site.com,并且代码目录在 /website/site/public 。如果要其他域名也使用80端口,那么增加一个server段就可以了。

server {
   listen 80;
   server_name site.com;
   root /website/site/public;
}

server {
   listen 80;
   server_name site2.com;
   root /website/site2/public;
}

nginx某个版本(我本地环境用的是1.6.2支持)开始支持server_name正则匹配,所以像上面这样的配置还可以简写成这样:

server {
  listen 80;
  server_name (?<domain>.+).com;
  root /website/$domain/public;
}

上面的写法要求域名和目录存在相同的直接对应关系,有时候对应的目录可能是不同的结构。比如说以下这种对应关系:

<font size=2> dev.site1.com 对应 /website/site1/public
dev.site2.com 对应 /website/site2/public
pre.site1.com 对应 /website/preview/site1/public
pre.site2.com 对应 /website/preview/site2/public </font>

那么使用正则的写法如下:

server {
  listen 80;
  server_name dev.(?<devdomain>.+).com pre.(?<predomain>.+).com;

  # 判断是否取到了正则中的变量,然后进行对应目录映射
  if ( $devdomain ){
    set $dir $devdomain ;
  }
  if ( $predomain ){
    set $dir preview/$predomain ;
  }

  root /website/$dir/public;

}

因为root命令不能被嵌套进if判断中,所以需要用一个变量来存储判断的结果。总之目的达成了。

相关文档

  1. nginx 子域名对应文件夹

  2. nginx用域名来转发请求

  3. sendmail用nginx做代理

  4. nginx 限制访问频率

  5. nginx 禁止百度云观测访问

  6. 为百度抓取单独开辟http通道

  7. nginx域名跳转配置和禁止ip访问

  8. nginx反向代理模拟本地服务器环境

随便看看

  1. git 大小写不区分问题

  2. 定长消息队列读写优化

  3. cnpm 立即同步

  4. css多行文本超出截断显示省略号

  5. css3自定义滚动条样式

  6. 安卓文字偏上,文字顶部被遮罩

  7. css3 文字渐变色

  8. npm远程服务器某些配置不兼容代理的解决办法

  9. curl用法

  10. ios13 vpn 能连接但不能传数据问题解决

  11. jxa运动指令脚本

  12. npm设置仓库地址和代理

  13. 树莓派 3B/3B+ usb启动

  14. sendmail用nginx做代理

  15. 树莓派配置wifi

  16. 随机取某个概率区间的代码

  17. 数据库清理优化

畅言模块加载中