一、进入nginx配置目录,修改配置文件
cd /etc/nginx/conf.d
sudo vim xxx.conf
server {
listen 40041;
server_name liuhuan.local;
root /data/email/script;
index index.html index.htm index.php;
location ~ .php { # 为了支持pathinfo,需将包含.php的URL交给fastcgi解析,同时需设置php.ini中的cgi.fix_pathinfo=1
expires off;
access_log /data/logs/inova-backend.log;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
二、遇到的问题:返回502
1、原因:
(1)nginx和php-fpm的进程间通信方式不一致,Nginx和PHP-FPM的进程间通信有两种方式:一种是TCP,一种是UNIX Domain Socket.
(2)nginx和fpm的权限组配置不一致
2、解决办法:
(1)先进入到fpm的启动配置文件:
ps -ef | grep nginx
// /etc/php/7.2/fpm/php-fpm.conf 为启动配置文件的位置
root 567 1 0 14:46 ? 00:00:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
www-data 568 567 0 14:46 ? 00:00:01 php-fpm: pool www
www-data 569 567 0 14:46 ? 00:00:00 php-fpm: pool www
www-data 1190 567 0 16:11 ? 00:00:00 php-fpm: pool www
liuhuan 1648 786 0 21:58 tty3 00:00:00 grep --color php
-----------------------------------------------------------------------------
sudo vim /etc/php/7.2/fpm/php-fpm.conf
(2)在fpm的启动配置文件里找到 php-fpm 进程服务的扩展配置文件位置:/etc/php/7.2/fpm/pool.d/www.conf
(3)查看 php-fpm 扩展配置文件的通信方式配置是否与nginx的配置一致
sudo vim /etc/php/7.2/fpm/pool.d/www.conf
sudo vim /etc/nginx/conf.d/xxx.conf
修改后,重启nginx和php-fpm服务
sudo service nginx restart
sudo service php7.2-fpm restart
(4)如果还是不行,就要去看nginx和fpm的权限组配置是否一致
sudo vim /etc/php/7.2/fpm/pool.d/www.conf
sudo vim /etc/nginx/nginx.conf
三、关于访问非框架的php脚本接口的跨域配置
参考文章:nginx如何配置跨域请求
下面这个在nginx配置不能少,因为接口跨域请求时,会先发一个OPTIONS预检请求到nginx,询问是否能跨域,通过之后才会正常发送原来的请求。
if ($request_method = 'OPTIONS') {
return 204;
}