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文件发现已经是解析过的了;

留下回复