2 Unix 系统下的 Nginx + PHP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2 Unix 系统下的 Nginx + PHP相关的知识,希望对你有一定的参考价值。

 

Unix 系统下的 nginx

‘x‘ 来表示版本号,请根据实际情况将 ‘x‘ 替换为对应的版本号。

1 安装 Nginx。

2 php 源代码:

tar zxf php-x.x.x

 


3 配置并构建 PHP。在此步骤您可以使用很多选项自定义 PHP,例如启用某些扩展等。 运行 ./configure --help 命令来获得完整的可用选项清单。 在本示例中,我们仅进行包含 PHP-FPM 和 mysql 支持的简单配置。

cd ../php-x.x.x
./configure --enable-fpm --with-mysql
make
sudo make install

 


4 创建配置文件,并将其复制到正确的位置。

cp php.ini-development /usr/local/php/php.ini
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

 



5 需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。

将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 0 。

打开 php.ini:

vim /usr/local/php/php.ini

 


定位到 cgi.fix_pathinfo= 并将其修改为如下所示:

cgi.fix_pathinfo=0

 



6 在启动服务之前,需要修改 php-fpm.conf 配置文件,确保 php-fpm 模块使用 www-data 用户和 www-data 用户组的身份运行。

vim /usr/local/etc/php-fpm.conf

 


找到以下内容并修改:

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default users group
; will be used.
user = www-data
group = www-data

 


然后启动 php-fpm 服务:

/usr/local/bin/php-fpm

 

7 配置 Nginx 使其支持 PHP 应用:

vim /usr/local/nginx/conf/nginx.conf

 


修改默认的 location 块,使其支持 .php 文件:

location / {
  root html;
  index index.php index.html index.htm;
}

 


下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

location ~* \.php$ {
  fastcgi_index index.php;
  fastcgi_pass 127.0.0.1:9000;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

 


重启 Nginx。

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

 



8 创建测试文件。

rm /usr/local/nginx/html/index.html
echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php

 


打开浏览器,访问 http://localhost,将会显示 phpinfo() 。

通过以上步骤的配置,Nginx 服务器现在可以以 SAPI 模块的方式支持 PHP 应用了。 当然,对于 Nginx 和 PHP 的配置,还有很多可用的选项, 请在对应的源代码目录执行 ./configure --help 来查阅更多配置选项。

 

 

安装示例:

PHP5.6

1 下载安装包
#wget http://mirrors.sohu.com/php/php-5.6.2.tar.gz
#tar -zxf php-5.6.2?

2 安装php依赖的包??
#yum install gcc gcc-c++ libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel libmcrypt-devel

3 安装 (-prefix是安装目录,-with-mysql是mysql的安装目录,由于我是用yum装的,所以不需要写-with-mysql=****哪里这样子,其他参数自行百度。)
#?./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem  --enable-sysvshm --enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring --disable-rpath --disable-debug --disable-fileinfo --with-mysql --with-mysqli --with-pdo-mysql --with-pcre-regex --with-iconv --with-zlib --with-mcrypt --with-gd --with-openssl --with-mhash --with-xmlrpc --with-curl --with-imap-ssl

?#make
#make install

若上几步都没报错的话就安装成功,有报错估计是少了点什么,用百度查查后yum一下吧。?
#cp php.ini-production /usr/local/php/etc/php.ini?

当我们使用nginx还要把php-fpm.conf放到/usr/local/php/etc/里头
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

接下来我们还可能需要将php-fpm作为server服务
?#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
(/usr/local/src/php-5.6.17是PHP安装文件夹)??
设置权限,并添加服务
#chmod +x /etc/init.d/php-fpm
#chkconfig --add php-fpm
以后可以使用如下命令管理php-fpm了
#service php-fpm start
#service php-fpm stop
#service php-fpm restart
#service php-fpm reload


make: *** [sapi/cli/php] Error 1 解决办法

ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor‘:
/usr/local/php/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open‘
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1# vi Makefile
 
在安裝 PHP 到系统中时要是发生「undefined reference to libiconv_open‘」之类的错误信息,那表示在「./configure 」沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。 

解决方法1:

编辑Makefile 大约77 行左右的地方: EXTRA_LIBS = ..... -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ..... -lcrypt -liconv 然后重新再次 make 即可。

解决方法2:
make ZEND_EXTRA_LIBS=‘-liconv‘
ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/

configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决办法

wget http://124.205.69.134/files/817400000026D1DF/soft.vpser.net/web/libmcrypt/libmcrypt-2.5.8.tar.gz
./configure
make
make install

Don‘t know how to define struct flock on this system, set --enable-opcache=no
vim /etc/ld.so.conf.d/local.conf     # 编辑库文件
/usr/local/lib                       # 添加该行
:wq                                  # 保存退出
ldconfig -v                          # 使之生效

Nginx:


wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar -zxvf nginx-1.9.7.tar.gz
cd nginx-1.9.7
./configure --user=www --group=www --prefix=/usr/local/nginx-1.9.7 --with-http_stub_status_module 
make;
make install
cd ..

vi /usr/local/nginx/conf/nginx.conf
...
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }


错误为:./configure: error: the HTTP rewrite module requires the PCRE library.
安装pcre-devel解决问题
yum -y install pcre-devel

错误提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library.   You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.
 
解决办法:
yum -y install openssl openssl-devel

加入环境变量 方法一:直接运行命令export PATH
=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin 使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。 方法二:执行vi ~/.bash_profile修改文件中PATH一行,将/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行之后 这种方法只对当前登录用户生效 方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码 PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin export PATH 最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。

 

 

PHP5.6
 
1 下载安装包 #wget http://mirrors.sohu.com/php/php-5.6.2.tar.gz #tar -zxf php-5.6.2?
 
2 安装php依赖的包?? #yum install gcc gcc-c++ libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel libmcrypt-devel
 
3 安装 (-prefix是安装目录,-with-mysql是mysql的安装目录,由于我是用yum装的,所以不需要写-with-mysql=****哪里这样子,其他参数自行百度。) #?./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring --disable-rpath --disable-debug --disable-fileinfo --with-mysql --with-mysqli --with-pdo-mysql --with-pcre-regex --with-iconv --with-zlib --with-mcrypt --with-gd --with-openssl --with-mhash --with-xmlrpc --with-curl --with-imap-ssl
?#make #make install
若上几步都没报错的话就安装成功,有报错估计是少了点什么,用百度查查后yum一下吧。? #cp php.ini-production /usr/local/php/etc/php.ini?
当我们使用nginx还要把php-fpm.conf放到/usr/local/php/etc/里头 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 接下来我们还可能需要将php-fpm作为server服务 ?#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm (/usr/local/src/php-5.6.17是PHP安装文件夹)?? 设置权限,并添加服务 #chmod +x /etc/init.d/php-fpm #chkconfig --add php-fpm 以后可以使用如下命令管理php-fpm了 #service php-fpm start #service php-fpm stop #service php-fpm restart #service php-fpm reloadmake: *** [sapi/cli/php] Error 1 解决办法 ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor‘: /usr/local/php/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open‘ collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1# vi Makefile 在安裝 PHP 到系统中时要是发生「undefined reference to libiconv_open‘」之类的错误信息,那表示在「./configure 」沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。
 
解决方法1:
 
编辑Makefile 大约77 行左右的地方: EXTRA_LIBS = ..... -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ..... -lcrypt -liconv 然后重新再次 make 即可。 解决方法2: make ZEND_EXTRA_LIBS=‘-liconv‘ ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/
 
configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决办法
 
./configure
make
make install
 
Don‘t know how to define struct flock on this system, set --enable-opcache=no
vim /etc/ld.so.conf.d/local.conf     # 编辑库文件
/usr/local/lib                       # 添加该行
:wq                                  # 保存退出
ldconfig -v                          # 使之生效
 
Nginx:
 
 
wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar -zxvf nginx-1.9.7.tar.gz
cd nginx-1.9.7
./configure --user=www --group=www --prefix=/usr/local/nginx-1.9.7 --with-http_stub_status_module
make;
make install
cd ..
 
vi /usr/local/nginx/conf/nginx.conf
...
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
 
 
错误为:./configure: error: the HTTP rewrite module requires the PCRE library.
安装pcre-devel解决问题
yum -y install pcre-devel
 
错误提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library.   You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.
 
解决办法:
yum -y install openssl openssl-devel
 

环境变量配置:

方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin

使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。

方法二:执行vi ~/.bash_profile修改文件中PATH一行,将/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行之后

这种方法只对当前登录用户生效

方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码

PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin

export PATH

最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。 

 
 
 
 

以上是关于2 Unix 系统下的 Nginx + PHP的主要内容,如果未能解决你的问题,请参考以下文章

NGINX:connect() 到 unix:/var/run/php7.2-fpm.sock 失败(2:没有这样的文件或目录)

NGINX:connect() 到 unix:/var/run/php7.0-fpm.sock 失败(2:没有这样的文件或目录)

关于nginx配置的一个报错connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory)

thinkphp 3.2.3在nginx+php下的url重写配置经验

[原]解决phpstudy下的nginx无法运行的问题

nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置