Nginx泛解析到子目录后自动判断有无public目录详解

 更新时间:2017年08月29日 10:23:10   作者:小李刀刀  
这篇文章主要给大家介绍了关于Nginx泛解析到子目录后自动判断有无public目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。

前言

我们大家在配置本地 PHP 开发环境时,除非是在 Windows 下,否则我都是偏向于 Nginx + PHP-FPM, 即使 Mac 下已经有了自带的 Apache+PHP 环境,依然如此。一方面是因为 Mac 自带的 PHP 版本不够新(5.6.x),另一方面,Nginx + PHP-FPM 更接近于我的生产服务器环境,而且也方便用 Homebrew 来管理版本和扩展。

在 Mac 下开发 Laravel, 官方提供了 valet, 可以方便地把子目录映射为虚拟主机,但我在使用的时候,遇到一些问题:

  • 真实错误信息难以追踪,总是报 valet 的 index.php 或者 laravel 的 index.php 错误;
  • Symfony 框架里的 config.php/app_debug.php 等无法直接访问。

于是我只保留了 dnsmasq 来管理特定后缀的域名(实现自动解析),然后放弃了 valet,自己做了一个泛解析绑定到本地子目录的配置。

具体配置如下(域名是 *.app):

server {
 listen 80;
 server_name ~^(?<subdomain>.+).app$;
 set $root /Users/kairee/Sites/$subdomain;
 
 if ( -d "/Users/kairee/Sites/$subdomain/public") {
  set $root /Users/kairee/Sites/$subdomain/public;
 }
 root $root;
 charset utf-8;
 client_max_body_size 128M;
 index index.php;
 
 location / {
  try_files $uri $uri/ /index.php$is_args$args;
 }
 
 access_log off;
 
 location ~ \.php\?? {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/tmp/php.sock;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
 
 location ~ /\.ht {
  deny all;
 }
}

采用这个配置以后:

  • 如果存在 ~/Sites/domain/public, 则 domain.app 域名的根目录会指向 ~/Sites/domain/public;
  • 如果存在 ~/Sites/domain 但是不存在 ~/Sites/domain/public, 则 domain.app 域名的根目录会指向 ~/Sites/domain;
  • 网站根目录下真实存在的 php 文件可以直接访问,只有不存在的文件才会通过入口文件(index.php)处理;
  • 如果需要支持其它框架,可以在配置文件中加一条 if 语句实现,比如要支持 symfony 的话,复制一下 if 判断块,把 public 改成 web 即可。

我虽然只是用于 mac/linux, 但实际上 Windows 下当然也是可以的,如果你在 Windows 下也使用 Nginx 的话。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • nginx中proxy_set_header参数的实现

    nginx中proxy_set_header参数的实现

    本文详细介绍了Nginx中proxy_set_header指令的用法,通过设置不同的请求头信息,可以实现更灵活的反向代理功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • nginx 常用指令 try_files allow root alias的使用

    nginx 常用指令 try_files allow root ali

    本文主要介绍了nginx 常用指令 try_files allow root alias的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Nginx配置文件的使用以及实现负载均衡的4种常用方式

    Nginx配置文件的使用以及实现负载均衡的4种常用方式

    这篇文章主要介绍了Nginx配置文件的使用以及实现负载均衡的4种常用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Nginx部署https网站并配置地址重写的步骤详解

    Nginx部署https网站并配置地址重写的步骤详解

    今天小编就为大家分享一篇关于Nginx部署https网站并配置地址重写的步骤详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 一文详解Nginx的访问限制与访问控制

    一文详解Nginx的访问限制与访问控制

    访问限制是一种防止恶意访问的常用手段,可以指定同一IP地址在固定时间内的访问次数,访问控制是控制客户端对服务端的访问,并非仅限制请求次数,而是允许某些请求或者直接拒绝某些请求,本文给大家具体介绍了Nginx的访问限制与访问控制,需要的朋友可以参考下
    2024-09-09
  • Nginx+Keepalived实现双机主备的方法

    Nginx+Keepalived实现双机主备的方法

    这篇文章主要介绍了Nginx+Keepalived实现双机主备的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 本地通过nginx配置反向代理的全过程记录

    本地通过nginx配置反向代理的全过程记录

    这篇文章主要给大家介绍了关于本地通过nginx配置反向代理的全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Windows系统下安装及部署Nginx详细教程(含多个站点部署)

    Windows系统下安装及部署Nginx详细教程(含多个站点部署)

    Nginx是一个很强大的高性能Web和反向代理服务,也是一种轻量级的Web服务器,可以作为独立的服务器部署网站,应用非常广泛,这篇文章主要给大家介绍了关于Windows系统下安装及部署Nginx(含多个站点部署)的相关资料,需要的朋友可以参考下
    2024-01-01
  • Centos 6.5 64位中Nginx详细安装部署教程

    Centos 6.5 64位中Nginx详细安装部署教程

    Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤,需要的朋友可以参考下
    2017-08-08
  • nginx 配置服务启动的教程详解

    nginx 配置服务启动的教程详解

    本文给大家详细介绍了nginx 配置服务启动的相关知识,非常不错,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05

最新评论