通过IP路径直接访问ci项目
缘起
公司之前一直使用php做后台,沿用的是简学易懂的ci框架。去年下半年起,听取了相关人士的建议,招聘了java。之后java在这个公司崛起了,到现在,php已经没有立足之地,要么转java,要么离职。
boss的想法,php入门容易(这难道有错吗),没有java安全(不知道是谁给他洗的脑),java可以团队化管理(好像php不行似的,这就是不招php的借口?)...等等,他觉得反正相关人士肯定不会坑他就是了。
扯远了。公司的java项目一直用ip地址+8080+项目目录的形式访问,php当然也可以,但为了平时方便使用,一般都会选择二级域名访问。解析二级域名,设置nginx虚拟主机,习惯如此。这当下,公司的域名备案突然没了,域名状态正常,但访问会提示备案。经过一番与备案客服的询问后得知,在新的政策下,公司之前的域名备案有问题,需要整改,但一直没有回应,就被备案系统强制注销掉了。阿里云多次发送邮件到公司的邮箱,但都石沉大海。想问客服,为什么不打电话的,看到邮箱里的整改邮件,里面有一条就是网站责任人手机号不正确。好吧,得注销原来的备案主体,然后重新备案。但眼下最要紧的事是,公司承接的一些项目怎么办?尤其是小程序只能用https域名形式,现在是彻底歇菜了。一些其他的项目,想着应该可以通过ip+项目名进行访问。
践行
本以为会简单,直接通过ip+项目名访问就是了,其实不然。所有的ci项目都做了url优化,访问项目,会有一个uri重写(跳转)的步骤。原来是设置虚拟主机,项目目录就是根目录。但现在的根目录是ip地址指向的document_root
,所以需要对rewrite规则做一下修改。
之前的虚拟主机配置如下(nginx):
server
{
listen 80;
server_name test.xx.com;
index index.html index.htm index.php;
root /home/wwwroot/test;
location / {
try_files $uri $uri /index.php$uri;
}
location ~ [^/]\.php(/|$)
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log /home/wwwlogs/test.log access;
}
现在是通过ip访问所有的项目了,所以需要在ip对应的虚拟主机设置中,添加对相关项目访问的url重写。
server
{
listen 80;
server_name 121.43.60.204;
index index.html index.htm index.php;
root /home/wwwroot;
location /test/{
try_files $uri $uri test/index.php$uri;
}
#location /test/ {
# if (!-e $request_filename) {
# rewrite ^/(.*)$ /test/index.php/$1 last;
# break;
# }
#}
location ~ [^/]\.php(/|$)
{
fastcgi_pass unix:/tmp/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#include fastcgi.conf;
include pathinfo.conf;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$"){
set $real_script_name $1;
set $path_info $2;
}
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log /home/wwwlogs/access.log access;
}
fastcgi
部分是为了解析php文件,不用修改,保持原样就好。主要是针对location /
部分,添加了项目目录,location配置下面用#
号注释部分,是nginx改写的另一种形式,适用于nginx低版本(<1.2)。
弯路
找问题是很少能够一步切中要害的,所以不免有些白折腾。之前的思路是,通过修改.htaccess
文件,修改RewriteBase
。但是部署到服务器上一直没起作用(nginx一般是不会去主动解析.htaccess文件的,一叶障目,没想到),就想着是不是base_url要设置一下ci 3.1.x新版本base_url配置 - 海滨擎蟹。之后又折腾了一下ci新版本,无果,便想着先在本地调试好了,然后再部署,然而本地根本没有问题,访问正常,但是到线上就一直404,是那种ci自己输出的404。所以一下次明白了,关键点还是在url重写上面。这时忽然意识到本地是apache,而服务器上是nginx。所以要在虚拟主机里面做修改调试。之后就ok了。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭