就在昨天晚上突然起了雅兴看了个大型网站redis队列应用的视频,正巧上班的时候和一位同事聊起了这个话题,突然发现曾经的理解有些偏差,所以正好趁这个机会自己练一下。谁成想刚开始动手就遇到了问题。
我家中的MAC很久没用来编程了,一直都是用我班上的MAC编程。刚写完准备测试一下,结果打开localhost运行后,竟然显示的是”It works”。我回忆了一下我曾经对这台电脑做过的调整,我也没有重装过啊。两年前用它来写php程序还是好好的啊,怎么一下子就不行了呢?我脑子蒙了一下,这不是服务器的默认页面吗?nginx什么时候用”It works”来显示默认页面了呢?打开文件的路径怎么显示404啊?
蒙蒙的我想一下应该如何开始排查问题。第一步先brew services stop nginx。再刷新localhost后,还是”It works”。擦,一种不好的预感油然而生,这是apache的默认页面好不啦。。。我记得我曾经删过MAC自带的apache和php的啊,怎么apache自己又装回来了?突然我意识到我曾经升级过MAC的版本。马上用terminal打开/etc/apache2,发现了apache又重新安装回来了,这个时候我才意识到MAC更新版本以后apache和php又重新安装回来了,而且还都使用了默认配置。可是我又一想,我工作用的MAC也升级了啊,怎么工作的电脑没有被重新配置啊。这让我百思不得其解,算了不想那么多了,先解决这个问题并重新配置吧。
接下来,我需要做的就是关闭默认的apache。
sudo apachectl stop
刷新localhost,apache还运行着。。。再刷新一下,服务停止了。再刷新下,apache又运行了,再刷新又停了。我去,这个问题真诡异,上网搜了下问题也没有人遇到过。
打开nginx后,还是这鸟样。那我看下nginx的配置吧,nginx配置怎么被还原了啊,而且还指定到了8080端口。那我localhost:8080看看什么样子,一切正常啊。我再打localhost后,apache服务真正停止了,难道这还有缓存啊。。。
打开phpinfo.php发现,php解析不了了。应该是配置被还原造成的,不行重新配置servers吧。
server {
listen 8080;
server_name localhost;
root /Library/WebServer/Documents;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
在配置上边的配置的时候,因为有一段时间没有配置有些淡忘了,所以刚开始配置的时候出现了几个问题,特此我在这里写一下。
1.listen 80
如果这样配置的话,在重启nginx的时候回提示permission denied。这是因为MAC认为1000以下的端口是不能够被除了管理员以外的人配置的。我曾试过改成80端口,但是brew services start nginx以后,nginx显示的是黄色,这说明nginx的启动有问题。后来再一想就为了每次打localhost不打80不是特别值当的,既然系统不建议用80端口,那么我就从了吧,我也没什么大项目会在这台机子上做,也就是运行一些简单的测试代码,打8080就打吧。
2.fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
这句话的意思是引导php-fpm解释所要运行的文件。$document_root是root /Library/WebServer/Documents的变量。如果你这样做的话,nginx会将错误的路径引导至php-fpm,就会出现“File not found”。这也是nginx配置新手经常错的地方。
3.root /Library/WebServer/Documents
这个就是指定当前服务的根目录。我们应该将其放在server模块底下,原因是根目录是整个配置的全局变量,所有的请求都可以被代理到这个地址上。当然,你可以将其放到location中,但是如果你有多个location的话,你不得不在每一个location中指定root。所以,我们才将其放到server中,之后用$document_root来引用。
4.autoindex on
这个命令式开启目录索引,nginx默认是不开启的。如果你网站有默认的index.html,nginx就只会展示index.html。如果没有index.html就会用目录索引来展示
nginx配置完毕了,服务也能够正常运作起来了,接下来就是php了。在配置php的时候我发现cli的php可以和cgi的配置不同,也就是说可以两者分别指定不同的php.ini。而且,cli的php.ini更改后不需要重启php服务就可以更新服务。这是因为cli是独立的服务不依托于服务器,只有cgi依托于服务器所以更新了php.ini后需要重启服务。
我们可以通过运行php –ini来查看cli读取的php.ini。phpinfo.php可以用来查看服务的php.ini情况。
在关闭apache之前,我曾想过就用apache吧,但是我竟然找不到MAC自带的php是安装在哪里了。后来发现也许是apache中的libphp5.so扩展来解释php的。这种方式给我带来的不方便的地方就是以后我想给php添加扩展的时候不知道如何操作。