如何正确配置Nginx + PHP
直接贴上代码逐行进行讲解,此处贴出一个能正常启动php脚本的最简nginx vhost配置:
[plain] view plain copy
server {
listen 8011;
server_name test.cn;
location ~ \.php?.*$ {
root /share/test;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
1、第一个大括号 server{ }:不必多说,代表一个独立的server,
2、listen 8011:代表该server监听8011端口
3、location ~ \.php?.*${
}:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请求,例如:http://192.168.244.128:8011/test.php/asdasd
http://192.168.244.128:8011/index.php等
4、root /share/test:请求资源根目录,告诉匹配到该location下的uri到/share/teset文件夹下去寻找同名资源。
5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。
6、fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
:这行配置意思是:动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。
7、include fastcgi_params; 引入fastcgi配置文件
以上就是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php
echo "hello world"; ?>保存,然后在浏览器中访问localhost:8011/xx.php
就可以在网页上显示hello world了。
root@leixuesong ~]# yum -y install gcc gcc-c++ autoconf automake openssl openssl-devel pcre-devel zlib-devel
下载nginx 1.6.2源码包
[root@leixuesong ~]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
解压nginx
[root@leixuesong ~]# tar zxvf nginx-1.6.2.tar.gz
进入解压文件夹
[root@leixuesong ~]# cd nginx-1.6.2
编译设置模块
[root@leixuesong nginx-1.6.2]# ./configure –with-http_stub_status_mocule –prefix=/opt/nginx
安装
[root@leixuesong nginx-1.6.2]# make && make install
nginx编译安装性能优化
1、在nginx 源码文件找到auto/cc/gcc文件找到如下几行
#debug
[root@leixuesong ~]# CFLASS=”$CFLAGS -g”
2、特定CPU优化CPU类型编译
–with-cc-opt=”-O3″
–with-cpu-opt=CPU类型
查看CPU类型。太多了写不完,如果想知道更多知识,可以去后盾人看看相关的教材。希望对你有用。
先上配置的过程,下面是解释。
1.首先,我们有必要先了解一下Nginx配置文件里指令的继承关系:
Nginx配置文件分为好多块,常见的从外到内依次是「http」、「server」、「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值。
让我们先从「index」指令入手吧
在问题配置中它是在「location」中定义的:
一旦未来需要加入新的「location」,必然会出现重复定义的「index」指令,这是因为多个「location」是平级的关系,不存在继承,此时应该在「server」里定义「index」,借助继承关系,「index」指令在所有的「location」中都能生效。
2.接下来看看「if」指令
说它是大家误解最深的Nginx指令毫不为过:
很多人喜欢用「if」指令做一系列的检查,不过这实际上是「try_files」指令的职责:
try_files $uri $uri/ /index.php;
除此以外,初学者往往会认为「if」指令是内核级的指令,但是实际上它是rewrite模块的一部分,加上Nginx配置实际上是声明式的,而非过程式的,所以当其和非rewrite模块的指令混用时,结果可能会非你所愿。
3.下面看看「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」,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。
此外,我们还需要考虑一个安全问题:在PHP开启「cgi.fix_pathinfo」的情况下,PHP可能会把错误的文件类型当作PHP文件来解析。如果Nginx和PHP安装在同一台服务器上的话,那么最简单的解决方法是用「try_files」指令做一次过滤:
try_files $uri =404;
4.下面就是如何配置的过程:
php用php-fpm启动,然后nginx
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这样就可以了
姚溥依托: php用php-fpm启动,然后nginx location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 这样就可以了
港南区17211454812: 如何在linux下配置nginx支持php - ?
姚溥依托: 需要.如果是nginx+php配置,也可以通过查找php执行路径 ps aux | grep php 如,路径为 /usr/local/nginx/sbin/php-fpm 然后执行以下命令/usr/local/nginx/sbin/php-fpm -i | grep “Loaded Configuration File” 即可看到php加载的配置文件
港南区17211454812: 如何配置NGINX+多个版本PHP么 - ?
姚溥依托: 思路:1. 配置不同版本的 php-fpm 分别监听在不同的端口, 例如,9001, 9002, 9003...2. 分别启动这几个版本的php-fpm3. 配置 nginx 不同的server调用不同端口的php-fpm
港南区17211454812: window8怎么配置nginx - ?
姚溥依托: 工具原料:电脑+win8+php环境 window8配置nginx方法如下: 1、首先需要准备的应用程序包. nginx:nginx/Windows-1.0.4php:php-5.2.16-nts-Win32-VC6-x86.zip (nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php...
港南区17211454812: windows下配置nginx的PHP环境 - ?
姚溥依托: 你别在用户目录里直接运行,这样他会把当前目录看错是用户目录了 D:(先换到D盘) cd wnmp/nginx(切换到NGINX的根目录) nginx(执行nginx.exe) 话说windows下不是可以直接双击nginx.exe的么
港南区17211454812: 怎么正确配置Nginx+PHP及正确的nginx URL重写 - ?
姚溥依托: PropertyPlaceholderConfigurer" p:locations-ref="locations" p:order="1" />
港南区17211454812: windows怎么搭建php开发环境配置 - ?
姚溥依托: 下载必要的软件工具.nginx请到nginx.org下载,php7请到windows.php.net下载. 下载到本地磁盘,放在同一个文件夹下,将上面两个文件解压,注意解压PHP7之后重命名一下(我这里取的是php7,官方的压缩包命名有特殊字符,以防运行出...
港南区17211454812: Linux下Nginx+PHP+MySQL如何配置 - ?
姚溥依托: 进入php源程序目录中的ext目录中,这里存放着各个扩展模块的源代码,选择你需要的模块,比如curl模块:cd curl 执行phpize生成编译文件,phpize在PHP安装目录的bin目录下 /usr/local/php5/bin/phpize 运行时,可能会报错:Cannot find ...
港南区17211454812: linux服务器怎么配置nginx+php+mysql环境 - ?
姚溥依托: 一、简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 ...
港南区17211454812: windows环境下使用nginx,如何支持php? - ?
姚溥依托: 使用nginx+php集成包phpfind或phpstudy即可一键安装好环境.还支持php版本一键切换,带控制面板的,纯中文绿色解压即可,完全符合国人使用习惯,你试试吧