nginxphp55
一般nginx默认配置中会是这个样子的。这里有一个SCRIPT_FILENAME变量,但是fastcgi_params这个文件中是不包含该变量的,改变量的定义实际上是在fastcgi.conf文件中。
实际上可以把配置修改成如下的配置。
location~.php${
root/usr/share/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_intercept_errorson;
includefast_cgi.conf;
#可以增加rewrite,也可以不增加。
}
按如上的配置,如果访问127.0.0.1:9000/a.php,则实际上根据root指令和fast_cgi.conf配置,nginx会通过fast_pass指令访问/usr/share/nginx/html/a.php这个文件。
记得用root指令,指定站点的文档根路径。
㈡ nginx 怎么修改php配置
####nginx配置虚拟机,此配置是支持tp框架pathinfo路径的
server{
#监听端口
listen 80;
#网站域名
server_name web.api55.com;
#默认索引页
index index.php;
#网站目录
root /usr/local/nginx/html/api55;
location ~ .+\.php($|/) {
set $script $uri;
set $path_info "/";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php?IF_REWRITE=1;
include fastcgi.conf;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root/$script;
fastcgi_param SCRIPT_NAME $script;
}
}
####负载均衡服务配置
upstream web{
server 192.168.67.135 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.67.136 weight=1 max_fails=3 fail_timeout=20s;
}
####删除原来web.api53.com里的server段里的location段,增加这一段location
location /{
proxy_pass http://web;
}
###################nginx转发php文件给apache
# 动态文件.php请求转发给后端Apache
location ~ .php$ {
# 向后端服务器发起请求时添加指定的header头信息
proxy_set_header Host $http_host;
# 向后端服务器发送真实 IP
proxy_set_header X-Real-IP $remote_addr;
# 让后端如php能直接通过变量获取真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
# nginx找不到文件时,转发请求给后端Apache
location @proxy {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
㈢ windows下nginx服务器下怎么装php
你可以使用护卫神.nginx大师,一键可以安装nginx+php
㈣ 云服务器如何配置nginx支持php
[root@redhat7 ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror
[root@redhat7 ~]# tar xzvf php-7.1.2.tar.gz
[root@redhat7 ~]# cd php-7.1.2/
[root@redhat7 ~]# ./configure --prefix=/usr/local/php --enable-fpm
[root@redhat7 php-7.1.2]# make&&make install
查看是否成功编译安装PHP
[root@redhat7 php-7.1.2]# php -v
PHP 7.1.2 (fpm-fcgi) (built: Apr 14 2017 20:21:53)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
编译安装完成后PHP不具备配置文件php.ini,此时只需复制php.ini-proction到 /usr/local/lib/php.ini即可,php.ini文件一般在/usr/local/lib/和/etc目录下
[root@localhost php-7.1.2]# cp php.ini-proction /usr/local/lib/php.ini
[root@redhat7 php]# /usr/local/php/sbin/php-fpm
[14-Apr-2017 20:59:49] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
[14-Apr-2017 20:59:49] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[14-Apr-2017 20:59:49] ERROR: FPM initialization failed
启动php-fpm发现缺乏配置文件/usr/local/php/etc/php-fpm.conf
此时只需复制php-fpm的配置文件在安装php时提供的配置文件的模版/usr/local/php/etc/php-fpm.conf.default到相应/usr/local/php/etc/php-fpm.conf即可
[root@redhat7 etc]# /usr/local/php/sbin/php-fpm
[14-Apr-2017 21:14:32] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/﹡.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
[14-Apr-2017 21:14:32] ERROR: No pool defined. at least one pool section must be specified in config file
[14-Apr-2017 21:14:32] ERROR: failed to post process the configuration
[14-Apr-2017 21:14:32] ERROR: FPM initialization failed
[root@redhat7 etc]# cp php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@redhat7 etc]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
[root@redhat7 etc]# /etc/init.d/php-fpm
[14-Apr-2017 21:23:02] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[14-Apr-2017 21:23:02] ERROR: FPM initialization failed
[root@redhat7 etc]# netstat -nldp|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3721/php-fpm: maste
[root@redhat7 php-7.1.2]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# chmod a+x /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# ll /etc/init.d/php-fpm
-rwxr-xr-x 1 root root 2401 4月 14 21:26 /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start
Starting php-fpm [14-Apr-2017 21:28:09] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[14-Apr-2017 21:28:09] ERROR: FPM initialization failed
failed
[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3721/php-fpm: maste
[root@redhat7 php-7.1.2]# kill 3721
[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000
[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@redhat7 php-7.1.2]# service php-fpm status
php-fpm (pid 3927) is running...
[root@redhat7 php-7.1.2]# chkconfig --add php-fpm
[root@redhat7 php-7.1.2]# chkconfig php-fpm --level 345 on
配置nginx支持PHP
修改nginx的配置文件,支持php文件的解析,找到location的添加位置,在后面添加下面这个location
location ~ .php$ {
root /usr/share/nginx/html; #指定php的根目录
fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
㈤ PHP 系统临时目录问题
这个不用这么仔细的刨根问底的~
这个名字只是用来存放临时文件的。当这个上传请求 完毕后 这个文件就自动删除了。所以 这个 tmp_name 只管会用就行了。
㈥ 如何正确配置Nginx + PHP
对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴。听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出代价。
假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析“REQUEST_URI”实现路由。
此时很多教程会教大家这样配置Nginx+PHP:
server {
listen 80;
server_name foo.com;
root /path;
location / {
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
这里面有很多错误,或者说至少是坏味道的地方,大家看看能发现几个。
…
我们有必要先了解一下Nginx配置文件里指令的继承关系:Nginx配置文件分为好多块,常见的从外到内依次是“http”、“server”、“location”等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值(有例外,详见参考)。
参考:UNDERSTANDING THE NGINX CONFIGURATION INHERITANCE MODEL
…
让我们先从“index”指令入手吧,在问题配置中它是在“location”中定义的:
location / {
index index.html index.htm index.php;
}
一旦未来需要加入新的“location”,必然会出现重复定义的“index”指令,这是因为多个“location”是平级的关系,不存在继承,此时应该在“server”里定义“index”,借助继承关系,“index”指令在所有的“location”中都能生效。
参考:Nginx Pitfalls
…
接下来看看“if”指令,说它是大家误解最深的Nginx指令毫不为过:
if (!-e $request_filename) {
rewrite . /index.php last;
}
很多人喜欢用“if”指令做一系列的检查,不过这实际上是“try_files”指令的职责:
try_files $uri $uri/ /index.php;
除此以外,初学者往往会认为“if”指令是内核级的指令,但是实际上它是rewrite模块的一部分,加上Nginx配置实际上是声明式的,而非过程式的,所以当其和非rewrite模块的指令混用时,结果可能会非你所愿。
参考:IfIsEvil and How nginx “location if” works
…
下面看看“fastcgi_params”配置文件:
include fastcgi_params;
Nginx有两份fastcgi配置文件,分别是“fastcgi_params”和“fastcgi.conf”,它们没有太大的差异,唯一的区别是后者比前者多了一行“SCRIPT_FILENAME”的定义:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
注意:$document_root 和 $fastcgi_script_name 之间没有 /。
原本Nginx只有“fastcgi_params”,后来发现很多人在定义“SCRIPT_FILENAME”时使用了硬编码的方式,于是为了规范用法便引入了“fastcgi.conf”。
不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为“fastcgi_param”指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次“SCRIPT_FILENAME”,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。
参考:FASTCGI_PARAMS VERSUS FASTCGI.CONF – NGINX CONFIG HISTORY
此外,我们还需要考虑一个安全问题:在PHP开启“cgi.fix_pathinfo”的情况下,PHP可能会把错误的文件类型当作PHP文件来解析。如果Nginx和PHP安装在同一台服务器上的话,那么最简单的解决方法是用“try_files”指令做一次过滤:
try_files $uri =404;
参考:Nginx文件类型错误解析漏洞
…
依照前面的分析,给出一份改良后的版本,是不是比开始的版本清爽了很多:
server {
listen 80
server_name foo.com;
root /path;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php;
}
location ~ .php$ {
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
实际上还有一些瑕疵,主要是“try_files”和“fastcgi_split_path_info”不够兼容,虽然能够解决,但方案比较丑陋,具体就不多说了,有兴趣的可以参考问题描述。
补充:因为“location”已经做了限定,所以“fastcgi_index”其实也没有必要.
㈦ nginx与php怎么结合在一起
nginx配置:
server{
#...其他location略
location~*.php${
fastcgi_pass127.0.0.1:9000;
}
}
PHP的fastcgi监听9000端口
php-cgi -b 9000
㈧ mac 权限的nginx怎么支持php
Mac OSX下配置nginx和php
首先安装nginx, 其次需要HomeBrew, 按照官网说明安装
然后安装PHP,以下的命令在终端执行:
更新下brew的库,加入php支持:
brew tap homebrew/pes
brew tap josegonzalez/homebrew-php
然后执行:
# 需要mysql,就把--without-mysql改为--with-mysql
brew install --without-apache --with-fpm --without-mysql php55
执行上面的命令后,brew就开始下载php源码并编译安装,大概几分钟时间。
安装完成后,配置php/bin到终端环境(未验证,貌似跟mac本身自带的php有冲突?):
#这一步成不成功没关系,这步的目的只是让终端可以执行PHP命令,不影响web服务器使用
echo 'export PATH="$(brew --prefix josegonzalez/php/php55)/bin:$PATH"' >> ~/.bash_profile
设置随系统自动启动:
mkdir -p ~/Library/LaunchAgents
#注意文件homebrew.mxcl.php55.plist的路径,需要根据实际情况改成自己的目录和文件名
cp /usr/local/Cellar/php55/5.5.13/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
上面只是设置了自启动,但是还没真正启动,所以执行以下命令手动启动PHP-FPM:
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
php的配置和启动工作已经结束了,然后验证一下,执行
lsof -Pni4 | grep LISTEN | grep php
如果输出以下类似内容,那就表示成功了,否则。。。自找原因吧:
php-fpm 69659 frdmn 6u IPv4 0x8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 69660 frdmn 0u IPv4 0x8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 69661 frdmn 0u IPv4 0x8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 69662 frdmn 0u IPv4 0x8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN)
最后就是配置nginx虚拟机:
server {
listen 80;
server_name php.cssor.com;
root /var/www;
location / {
index index.html index.shtml;
}
#配置后缀为.php的就交给php引擎处理
#如果需要整站都托管给php,就把location ~ \.php$ 替换为location / ,同时上面的location / 配置就不需要了
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;
}
}
㈨ 如何架设Nginx+Php Web服务器
由于每个过程较繁琐,所以这里说说具体步骤,每个步骤的具体内容可以网络搜索。
安装步骤
一、 编译安装PHP5.2.9所需的支持库
二、编译安装MySQL 5.1.34扩展库
三、编译安装PHP(FastCGI模式)
四、修改php-fpm配置文件
五、创建www用户组及www用户
六、编译安装Nginx
七、创建fcgi.conf文件
八、编辑Nginx配置文件
九、配置开机自动启动Nginx + PHP
十、优化Linux内核参数
㈩ nginx php5 什么也不输出
1.修改php-fpm.conf中配置 没有则增加
catch_workers_output = yes
error_log = log/error_log
2.修改php.ini中配置,没有则增加
log_errors = On
error_log = "/usr/local/lnmp/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE
3.重启php-fpm,
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了
请注意:
1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。
2.找不到php.ini位置,使用php的phpinfo()结果查看
3.如何修改PHP错误日志不输出到页面或屏幕上
修改php.ini
display_errors = off //不显示错误信息(不输出到页面或屏幕上)
log_errors = on //记录错误信息(保存到日志文件中)
error_reporting = E_ALL //捕获所有错误信息
error_log = //设置日志文件名
程序中修改以上配置
ini_set("display_errors",0)
ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量
ini_set("error_log","<日志文件名>")
ini_set("log_errors",1);
4.如何将php的错误日志输出到nginx的错误日志里
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。
所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写