Nginx使用一个域名配置多个目录 完美解决单页应用跨域烦恼

45101545042979.gif

写过前后端分离项目的童鞋都知道, 例如Vue写的项目打包后会生成一个dist文件夹, 需要将这个文件夹放在服务器上, 配置一个单独的域名去访问

然后PHP写的接口一般也需要一个单独的域名去访问, 这时单页应用访问PHP接口就会出现跨域的各种问题, 为了解决各种跨域恶心人的问题, 于是就想到直接把单页应用和PHP接口放在一个域名下, 用不同的前缀去访问接口即可

所以本文针对目前PHP主流框架 Laravel5.6 以及 ThinkPHP5.1 写了2个伪静态的配置, 这样妈妈再也不用担心我们跨域啦, 嘻嘻

dist文件夹即单页应用的目录, 而public文件夹即ThinkPHP或者Laravel的入口文件夹

访问 admin.lcgod.com/* 则会匹配单页应用 /www/dist 里的应用

访问 admin.lcgod.com/api 则优先匹配PHP接口 /www/api 里的应用

完整nginx.conf配置如下:

Laravel5.6

server { listen 80; server_name admin.lcgod.com; root /www/dist; index index.html; location /api { try_files $uri $uri/ /index.php?$query_string; } location / { try_files $uri $uri/ /index.html; } location ~ \.php(.*)$ { root /www/api/public; index index.php; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

ThinkPHP5.1

server { listen 80; server_name admin.lcgod.com; root /www/dist; index index.html; location /api { if (!-e $request_filename) { rewrite ^/api/(.*)$ /index.php?s=/$1 last; } } location / { try_files $uri $uri/ /index.html; } location ~ \.php(.*)$ { root /www/api/public; index index.php; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

配置完nginx.conf, 重启nginx进程

service nginx reload

发布评论
评论
共计 1条评论
最新评论
2019-01-12 16:44:23买卖货源网[河南省郑州市网友]
都是技术人
0
0
回复