Nginx反向代理并支持解析php
前言
接口联调时,有一些场景,我们需要给本地的服务(webpack,gulp等启动的服务)使用域名访问,例如:
1、第三方登录回调地址不支持localhost
2、使用cookie作为认证的接口
我们需要修改本地的hosts文件,将能跨域访问的域名指向我们的服务。
对于同一个业务的多个项目,所以我们启动服务器的时候一般会从80端口上运行才能保证访问的时候不加端口。如果我们使用webpack-dev-server的时候,只能启动一个项目到80端口上,所以我们可以使用nginx反向代理的方式对url进行处理,webpack-dev-server就可以使用不同的端口启动不同的应用。
其实配置hosts也有很多的用处,对于使用cookie鉴权的应用,只有指定的域名才可以拿到授权信息。下面是一个简单的映射关系;
www.webrepos.cn/blog http://localhost:8001
www.webrepos.cn/bbs http://localhost:8002
www.webrepos.cn/cms http://localhost:8003
然后开发时期,我们在本地配置host文件,写入下面的内容:
127.0.0.1 www.webrepos.cn
然后我们启动本地的nginx服务器就会代理我们上面的地址,我们在nginx对location做一个代理就可以实现转发到不同的服务上了,并且登录的回调也是没有问题的,具体反向代理的location配置可以查看一些文档。
使用nginx做反向代理,然后解析php文件(php可以在轻量级的前端服务里面做一些简单的事情,之前我们就用这个来生成一些html的meta标签等),结合webpack-derv-server简直很丝滑啊。
本文的实践是在macOS上进行的,win/linux也是类似的。
安装
首先安装nginx和php,此处使用brew来安装(mac系统使用homebrew,linux可以直接使用对应的包管理器)。
brew install nginx php
如果不在nginx下面配置php解析,访问php文件的时候,浏览器直接会提示下载php文件;
1、配置php-fpm
打开php-fpm的配置文件,如果没有就复制下默认的配置文件;
# 的目录存在php-fpm.conf文件,直接跳过上面的步骤即可。下面的PHP版本和自己安装的一致
sudo cp /usr/local/etc/php/7.2/php-fpm.conf.default /usr/local/etc/php/7.2/php-fpm.conf
修改配文件;
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /usr/local/var
; Default Value: log/php-fpm.log
; 下面的这一行默认是加上注释的,就是前面有个分号,直接删除,并修改城下面的值就可以了
error_log = /usr/local/var/log/php-fpm.log
保存就好了。
2、修改下nginx的fastcgi配置
让其可以将php文件交由php-fpm来解析:
# 如果没有的话就拷贝一份nginx.conf.default,命名为nginx.conf
vim /usr/local/etc/nginx/nginx.conf
在nginx对应的服务器部分加上下面的代码:
location ~ \.php$ {
# 这里的root需要按照你的要求进行配置,主要是描述的你的php存在的位置。
root /Users/admin/Source;
# 注意这个名字一定要修改下,修改成$document_root才可以
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
3、我们启动下php-fpm
直接在命令行执行:
sudo /usr/local/Cellar/php/7.2.5/sbin/php-fpm
# 根据自己安装的来启动,注意版本重新加载下我们nginx服务器配置文件就可以了
sudo nginx -s reload
大功告成,现在访问下php文件发现已经是解析过的了;