配置:主域名www.demo.xyz副子域名api.demo.xyz列表项其中,api.demo.xyz已加入版本控制,使用URL路由方式在route.php路由中配置文件,返回如下[//api版本路由':version/:controller'=>':version.:controller',//方法名省略时':version/:controller/:function'=>':version.:controller/:function'//有方法名时];//同时在controller命名空间中加入版本号app\api\controller\v1;classUser{publicfunctionlogin(){$data=['姓名'=>'保罗','年龄'=>19];返回json($数据);}}//这个例子的最终URL显示为http://api.demo.xyz/v1/userRoute::get(':version/user','api/:version.user/login');项目最终目录结构为nginx配置#主域名配置server{listen80;服务器名称demo.xyzwww.demo.xyz;根/www/www.demo.xyz/dist;#字符集koi8-r;#access_log日志/host.access.logmain;location/{indexindex.htmlindex.htmindex.php;}#这可以用作反向代理#location/v1{#proxy_passhttp://api.demo.xyz;#}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根html;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器#location~\.php${root/www/www.demo.xyz;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;}#拒绝访问.htaccess文件,如果Apache的文档根#与nginx的根一致##location~/\.ht{#denyall;#}}#二级接口子域名称配置server{list恩80;服务器名称api.demo.xyz;根/www/api.demo.xyz/public;#charsetkoi8-r;配置cors解决跨域问题add_headerAccess-Control-Allow-Origin*;add_headerAccess-Control-Allow-Methods'GET,POST,OPTIONS';add_headerAccess-Control-Allow-Headers'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';如果($request_method='OPTIONS'){返回204;}#access_log日志/host.access.log主要;location/{indexindex.htmlindex.php;if(!-e$request_filename){最后重写^(.*)$/index.php?s=/$1;}}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根HTML;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给监听127.0.0.1:9000的FastCGI服务器#location~\.php${root/www/api.demo.xyz/public;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;.htaccess文件,如果Apache的文档根#与nginx的根一致##location~/\.ht{#denyall;#}}nginx配置cors需要说明的一些问题1.根据CORSonNginx配置结果不生效##Wide-openCORSconfigfornginx#location/{if($request_method='OPTIONS'){add_header'Access-Control-Allow-Origin''*';add_header'访问控制允许我方法''获取,发布,选项';##自定义标头和标头各种浏览器*应该*可以但不是#add_header'Access-Control-Allow-Headers''DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-控件、内容类型、范围';##告诉客户这个飞行前信息的有效期为20天#add_header'Access-Control-Max-Age'1728000;add_header'Content-Type''text/plain;字符集=utf-8';add_header'内容长度'0;返回204;}if($request_method='POST'){add_header'Access-Control-Allow-Origin''*';add_header'Access-Control-Allow-Methods''GET,POST,OPTIONS';add_header'Access-Control-Allow-Headers''DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header'Access-Control-Expose-Headers''Content-Length,Content-Range';}if($request_method='GET'){add_header'Access-Control-Allow-Origin''*';add_header'Access-Control-Allow-Methods''GET,POST,OPTIONS';add_header'Access-Control-Allow-Headers''DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header'Access-Control-Expose-Headers''Content-Length,Content-Range';}}2。根据UsingCORS的配置成功解决了跨域问题#其实就是在location块外加上如下配置add_headerAccess-Control-Allow-Origin*;add_headerAccess-Control-Allow-Methods'GET,POST,OPTIONS';add_headerAccess-Control-Allow-Headers'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if($request_method='OPTIONS'){return204;}服务器最终的目录结构为
