nginx支持php
实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法
实现Nginx中使⽤PHP-FPM时记录PHP错误⽇志的配置⽅法今天⼀PHP程序运⾏出现问题,想看看错误信息,但是Nginx环境如何查看PHP错误信息?常规做法是看log⽇志⽂件,但是⾸先要做的是能让PHP把错误信息输出到log⽂件⾥。
原以为很简单,直接在php.ini⾥设置下log⽇志⽂件路径即可,但测试后发现这样做是不⾏的。
那问题在哪?通过查阅了⼀些相关的⽂章资料,原来主要根源在于php-fpm的配置⽂件php-fpm.conf。
php-fpm的配置⽂件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们看不到php的错误⽇志。
要解决这⼀问题,只需设置下php-fpm.conf即可。
我使⽤的关键代码如下:[global]pid = /usr/local/php/var/run/php-fpm.piderror_log = /usr/local/php/var/log/php-fpm.loglog_level = notice[www]; 下⾯这句不能少,记录PHP执⾏错误⽇志catch_workers_output = yes解释:1、error_log 是定义⽇志⽂件路径2、log_level = notice 不能少3、catch_workers_output = yes 不能少通过这样设置后,php的错误信息就会直接写⼊error_log定义的⽇志⽂件⾥了。
重启php服务,⽅法:service php-fpm restart试试有⽆效果?上述⽅法⽆效?再按下⾯⽅法设置php.ini⽹上不少⽂章说到还要设置php.ini的error_log路径,但我测试发现,php.ini的error_log路径设置是没有意义的,这就解释了为什么⼀开始我只设置php.ini⽇志输出路径却没有效果的原因。
也许是别⼈的php-fpm.conf设置与我不同,造成还需要设置php.ini的error_log路径。
实战Nginx与PHP(FastCGI)的作用、安装、配置与优化
实战Nginx与PHP(FastCGI)的作用、安装、配置与优化一、什么是 FastCGIFastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。
多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。
FastCGI是从CGI发展改进而来的。
传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。
这在处理高并发访问时,几乎是不可用的。
另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。
当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。
这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
二、Nginx+FastCGI运行原理Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。
为了调用CGI程序,还需要一个FastCGI的wrapper (wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。
当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。
Nginx与PHP(FastCGI)的安装、配置与优化
Nginx与PHP(FastCGI)的安装、配置与优化FastCGI的介绍和工作原理首先简单的介绍下FastCGI:FastCGI是语言无关的、可伸缩结构的CGI开放扩展,其主要行为是将CGI解释器进行保持在内存中并因此获得较高的性能。
众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等。
FastCGI的工作原理是:(1)FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等待来自Web Server的连接。
在文本中,采用PHP-FPM进程管理器启动多个php-cgi FastCGI进程。
启动php-cgi FastCGI进程时,可以配置以TCP和UNIX套接字两种方式启动。
(2)当客户端请求达到Web服务器(Nginx)时,Web服务器将请求采用TCP协议或UNIX 套接字方式转发到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程)。
Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(3)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web服务器(Nginx)。
当FastCGI子进程关闭连接时,请求便告知处理完成。
FastCGI子进程接着等待并处理来自FastCGI进程管理的下一个连接。
而在一般的普通CGI模式中,php-cgi在此便退出了。
PHP-FPMPHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在/downloads.php下载得到.PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。
必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。
Nginx和PHP-FPM的启动、重启、停止脚本分享
Nginx和PHP-FPM的启动、重启、停⽌脚本分享服务器上的Nginx和PHP都是源码编译安装的,不像ubuntu⼀样有⾃带service启动脚本,所以不⽀持类似以前的nginx (start|restart|stop|reload)了。
⾃⼰动⼿丰⾐⾜⾷。
以下脚本应该在RHEL, Fedora, CentOS下都适⽤。
⼀、Nginx启动脚本/etc/init.d/nginx复制代码代码如下:#!/bin/bash## Startup script for Nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15# description: Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server# processname: nginx# config: /usr/local/nginx/conf/nginx.conf# pidfile: /usr/local/nginx/logs/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxstart() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {configtest || return $?stopsleep 1start}reload() {configtest || return $?echo -n $"Reloading $prog: "killproc $nginx -HUPRETVAL=$?echo}force_reload() {restart}configtest() {$nginx -t -c $NGINX_CONF_FILE}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac编辑好后保存,执⾏以下命令复制代码代码如下:sudo chmod +x /etc/init.d/nginxsudo /sbin/chkconfig nginx onsudo /sbin/chkconfig --list nginxnginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off完成!可以使⽤以下命令管理Nginx了复制代码代码如下:service nginx startservice nginx stopservice nginx restartservice nginx reload/etc/init.d/nginx start/etc/init.d/nginx stop/etc/init.d/nginx restart/etc/init.d/nginx reload⼆、PHP-FPM启动脚本/etc/init.d/php-fpm复制代码代码如下:#!/bin/bash## Startup script for the PHP-FPM server.## chkconfig: 345 85 15# description: PHP is an HTML-embedded scripting language # processname: php-fpm# config: /usr/local/php/etc/php.ini# Source function library.. /etc/rc.d/init.d/functionsPHP_PATH=/usr/localDESC="php-fpm daemon"NAME=php-fpm# php-fpm路径DAEMON=$PHP_PATH/php/sbin/$NAME# 配置⽂件路径CONFIGFILE=$PHP_PATH/php/etc/php-fpm.conf# PID⽂件路径(在php-fpm.conf设置)PIDFILE=$PHP_PATH/php/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME# Gracefully exit if the package has been removed.test -x $DAEMON || exit 0rh_start() {$DAEMON -y $CONFIGFILE || echo -n " already running" }rh_stop() {kill -QUIT `cat $PIDFILE` || echo -n " not running"}rh_reload() {kill -HUP `cat $PIDFILE` || echo -n " can't reload"}case "$1" instart)echo -n "Starting $DESC: $NAME"rh_start;;stop)echo -n "Stopping $DESC: $NAME"rh_stopecho ".";;reload)echo -n "Reloading $DESC configuration..."rh_reloadecho "reloaded.";;restart)echo -n "Restarting $DESC: $NAME"rh_stopsleep 1rh_startecho ".";;*)echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2 exit 3;;esacexit 0编辑好后保存,执⾏以下命令复制代码代码如下:sudo chmod +x /etc/init.d/php-fpmsudo /sbin/chkconfig php-fpm on# 检查⼀下sudo /sbin/chkconfig --list php-fpmphp-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off完成!可以使⽤以下命令管理php-fpm了复制代码代码如下:service php-fpm startservice php-fpm stopservice php-fpm restartservice php-fpm reload/etc/init.d/php-fpm start/etc/init.d/php-fpm stop/etc/init.d/php-fpm restart/etc/init.d/php-fpm reload。
设置安全的nginx+PHP网站目录权限
断开 网 络 的 方 法 比较 多 , 最 简单 杀 毒 。在 杀 毒 时 , 建 议 用 户 先 对 杀 毒
程、 不 明程 序运 行 , 或 者 计 算 机 运 行
的办 法 就 是跑 到 电脑 后 面 拨下 网线 ,
软 件 进行 必 要 的设置 。 例 如 扫描 压 缩
速度 明显 变 慢 ,甚至 I E经 常 询 问是 这 也 是最 干 脆 的办 法。 不过 在 实 际 的 包 中的 文 件 、 扫 描 电子 邮件 等 , 同 时 否运 行 某 些 Ac t i v e X 控件 、调 试脚 本 应 用 中 ,我 们并 不 需 要这 样 麻 烦 , 毕 对 包含 病 毒 的文 件 处 理 方 式 , 例 如可 等。 那 么这 时 候 表示 此 时你 可 能 已经 竟 跑 到 电脑 后 面还 是 比较 烦 神 的 。 如 以 将 其 设 为 “ 清 除 病 毒 ”或 “ 隔离” , 中毒 了 。 果 安 装 了防 火 墙 , 可 以在 防 火墙 中直 而 不是 直 接 “ 删 除 文件 ” , 这样做的 目
安 全 咖 啡 屋
计 算 机 与 网 络 创 新 生 活 _哺 饲枷. 】 , I 曩 踊 l 嘲 曩
设置蜜垒 的 n 癣 n x +
基于 h n u x系 统 的 we b服 务 器 权 限 设 置 问题 ) 架构听说过 很 多年了 , 也 用 了 好 几 年 ,不 过 都 是 用 现 成 的 运 行 环 境 , 比如虚 拟主 机 、 共用 V P S 。 亲 手 配
配置权 限 的原 则 是 , 在 保 证 网 站正常运 行下 , 尽 量给最低 权限 。 我 的配置 :
这样 即使 网站被挂马 了 , 也 能 降 低 置 , 7 7 7也 是 最 便 捷 做 法 了 。 很 多损 失 , 例如 , 对 方 无 法 在 你 的
Ubuntu中Nginx的安装与配置详细说明
Ubuntu中Nginx的安装与配置详细说明1.Nginx介绍Nginx是⼀个⾮常轻量级的HTTP服务器,Nginx,它的发⾳为“engine X”,是⼀个⾼性能的HTTP和反向代理服务器,同时也是⼀个IMAP/POP3/SMTP 代理服务器。
2.对PHP⽀持⽬前各种web 服务器对PHP的⽀持⼀共有三种:(1)通过web 服务器内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl⽀持。
(2)通过CGI来实现,这个就好⽐之前perl的CGI,该种⽅式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执⾏脚本然后将结果返回给服务器;另⼀⽅⾯就是不太安全;该⽅⾯⼏乎很少使⽤了。
(3)最新出现⼀种叫做FastCGI。
所谓FastCGI就是对CGI的改进。
它⼀般采⽤C/S结构,⼀般脚本处理器会启动⼀个或者多个daemon进程,每次web 服务器遇到脚本的时候,直接交付给FastCGI的进程来执⾏,然后将得到的结果(通常为html)返回给浏览器。
2.1 Apache+mod_php模式我们很久⼀段时间使⽤经典的Apache+mod_php。
Apache对PHP的⽀持是通过Apache的模块来⽀持的。
如果从源代码编译安装PHP的话,如果希望Apache⽀持PHP的话,在./configure步骤需要指定--with-apxs2=/usr/local/apache2/bin/apxs 表⽰告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析;⽽且在最后⼀步make install的时候我们会看到将动态链接库libphp5.so拷贝到apache2的安装⽬录的modules⽬录下,并且还需要在httpd.conf配置⽂件中添加LoadModule语句来动态将libphp5.so模块加载进来,从⽽实现Apache对php的⽀持。
CentOS 7源码编译安装最新版php5.6和nginx1.7.9及mysql(搭建lnmp环境) – 飞嗨
CentOS 7源码编译安装最新版php5.6和nginx1.7.9及mysql(搭建lnmp环境) –飞嗨突然,一不留神打开了网站,点了一下download,靠,都已经php5.6 stable了,而我yum安装的php还是5.4版本的,太守旧了!嘿嘿,我是微软云的小白鼠,当年就多注册了个账号,还躺着个云服务器在睡觉呢,于是乎,私心想着搭建一个lnmp的备份服务器…源码编译安装,各种依赖包纠结,所以呢,mariadb(mysql)是yum安装的,php5.6和nginx1.7.9是源码安装的…装着装着,在跑./configure脚本的时候,又忘记启用enable curl等等常用扩展鸟,装完后,又去源码目录编译扩展,动态添加扩展…lnmp一、安装mariadb(mysql)服务yum install mariadb mariadb-server mariadb-devel自从mysql被oracle公司收购后,mysql就有闭源收费的风险,所以,就有了社区版改装的mysql分支mariadb来规避这个风险。
centos7开始,yum源的mysql全部都替换成mariadb的了。
所以,mariadb是mysql的一个分支。
不过貌似听说,google有一部分数据库也都已经迁移到mariadb 了,真是要鄙视一下oracle公司,oracle数据库都这么赚了,还打着mysql的主意…二、源码编译安装php5.61.下载php5.6 wget/distributions/php-5.6.5.tar.gz纠结的是,刚安装好的centos 7连wget都木有,所以yum -y install wget然后再下载,,,2.解压tar -xvzf php-5.6.5.tar.gz 进入cd php-5.6.53.运行./configure脚本,启用需要的扩展模块,并指定php的安装目录 ./configure –enable-fpm –enable-mbstring–with-mysql=mysqlnd –with-mysqli=mysqlnd–with-pdo-mysql=mysqlnd这一步很是关键的,我忘记指定–prefix,它默认也是给我安装在/usr/local/php,不过还是指定一下比较妥当。
CentOS7.0 64位 Nginx PHP多版本镜像使用手册V1.1
CentOS7.0 64位Nginx PHP多版本镜像使用手册备注:1.文档绿色字体为执行命令2.支持备份(包含本地、远程、OSS)等功能3.未经容许,文档和代码不能传播CENTOS7.0 64位NGINX PHP多版本镜像使用手册 (1)1镜像说明 (4)1.1版本说明 (4)1.2目录说明 (5)1.3参数优化 (6)2PHP版本切换 (7)3将网站数据迁移至数据云盘 (8)4MYSQL数据库管理 (9)4.1数据库默认ROOT密码 (9)4.2更改数据库ROOT密码 (10)4.3创建一个数据库 (11)4.4删除一个数据库 (12)4.5创建数据库用户 (13)4.6配置M Y SQL远程连接? (14)5如何管理虚拟主机 (16)5.1添加虚拟主机 (16)5.2删除虚拟主机 (18)6如何管理FTP账号 (19)7如何备份 (20)8如何管理服务 (22)9如何升级版本 (23)10如何卸载 (24)11附录 (25)11.1如何部署一个网站? (25)11.2关于PHP缓存(O PCACHE) (27)11.3关于网站根目录权限 (28)11.4关于R EDIS、M EMCACHED (29)11.5关于防火墙(IPTABLES) (30)1镜像说明1.1版本说明操作系统:CentOS 7.0 64位PHP运行环境(CentOS7.0 64位Nginx PHP多版本)V1.1软件版本详细:●Nginx1.9.11●PHP5.3.29●PHP5.4.45●PHP5.5.32●PHP5.6.18●PHP7.0.3●MySQL5.6.29●Redis3.0.7●Memcached1.4.25●Jemalloc4.0.4●Pure-FTPd1.0.42●phpMyAdmin4.4.15.4功能亮点:1. 基于阿里云一键安装包源码安装,安全、稳定、高效!2. 源码编译安装,细节安全优化,纯命令行,占用系统资源低3. jemalloc优化MySQL内存管理;4. 支持PHP5.3、5.4、5.5、5.6和PHP7.0版本自由切换5. 交互添加Nginx虚拟主机,方便快捷6. 菜单式FTP账号管理脚本,轻松建立ftp虚拟用户7. 提供在线Nginx、MySQL、PHP、Redis、phpMyAdmin升级脚本8. 提供本地备份和远程备份(服务器之间rsync)、内网阿里云OSS备份功能1.2目录说明源码安装目录:Nginx:/usr/local/nginxPHP:/usr/local/phpMySQL:/usr/local/mysqlPureftpd:/usr/local/pureftpdRedis:/usr/local/redisMemcached:/usr/local/memcachedphpMyAdmin:/data/wwwroot/default/phpMyAdmin数据存储目录:数据库(MySQL):/data/mysql网站根目录:/data/wwwroot/ #添加虚拟主机会自动创建这个目录Web访问日志:/data/wwwlogs默认ip直接访问内容对应根目录:/data/wwwroot/default,该目录包含首页demo、Opcache缓存管理、phpinfo、phpmyadmin、探针等文件,目录里面文件可删除,目录不能删除。
配置nginx支持php,jsp,asp,aspxWEB安全 电脑资料
配置nginx支持php,jsp,asp,aspxWEB平安电脑资料配置nginx支持php,jsp,asp,aspx…说到Nginx,大家应该比拟熟悉了吧,虽然出现地比拟晚,但是他优良的性能让很多系统工程师折服,并被大量的采用,让nginx通过fastcgi支持php已经介绍过了,这里仅介绍让nginx 反向代理tomcat等jsp容器来serve jsp页面的方法:假设你已经配置了tomcat并跑在本机的8080端口,翻开你的虚拟机配置文件,加下以下几行:location / {proxypass 127.0.0.1:8080;proxyredirect off;proxysetheader Host $host;proxysetheader X-Real-IP $remoteaddr;proxysetheader X-Forwarded-For $proxyaddxforwardedfor; clientmaxbodysize 10m;clientbodybuffersize 128k;proxyconnecttimeout 30;proxysendtimeout 30;proxyreadtimeout 30;proxybuffersize 4k;proxybuffers 4 32k;proxybusybufferssize 64k;proxytempfilewritesize 64k;}OK啦,jsp可以跑了!想径向代理IIS?apache?——尽管去做吧!PS:现在官方已经推出Windows版本的Nginx,所以支持Asp或者.就完全是水到渠成了,可以直接在一台机器上做了,不用完全依赖mono 了,模板,内容仅供参考。
OpenBSD+Nginx+MySQL+PHP环境搭建手册[O.N.M.P第一版]
OpenBSD+Nginx+MySQL+PHP环境搭建手册[O.N.M.P第一版] OpenBSD.Nginx.MySQL.PHP环境搭建手册[O.N.M.P第一版]所谓的O.N.M.P.是指OpenBSD、Nginx、MySQL、PHP(fastcgi),是利用OpenBSD及其软件包搭建的时下流行的MySQL+PHP应用环境,下面对主要的软件做下介绍:OpenBSD:可能是这个星球最安全的操作系统了,在十几年的时间里面只被发现了两个远程安全漏洞。
Nginx:来自俄罗斯的HTTP软件,据说性能达到老牌的Apache十倍!并且极其节约资源,是单台服务器跑PHP应用的首选。
官方文档声称能达到5W个并发连接,生产环境下单台双核2.33G服务器可以跑到3W个并发连接(仅运行Nginx+PHP-fastcgi)。
MySQL:老牌的开源数据库软件。
PHP:这个几乎无人不知,和MySQL一起构成了开源环境下最强的建站组合。
下面以OpenBSD 4.4为例进行讲解。
按照惯例,root环境:一、软件环境的搭建OpenBSD的安装就不罗嗦了,重点是分区的部分,推荐/var/mysql、/var/log、/var/mail、/var/nginx这几个目录单独分区,并给予足够的空间。
系统安装的最后询问是否默认启动Ssh服务时回答”n”。
安装必须的软件包:export PKG_PATH=ftp:///pub/OpenBSD/4.4/packages/i386/pkg_add wget mysql-server php5-fastcgi php5-gd-5.2.6-no_x11 php5-mysql phpMyAdmin lighttpd-1.4.19p3 nginx pecl-APC装完后按提示做连接并创建PHP工作目录:ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modulesln -fs /var/www/conf/php5.sample/apc.ini /var/www/conf/php5/apc.iniln -fs /var/www/conf/php5.sample/gd.ini /var/www/conf/php5/gd.iniln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.iniln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini mkdir /var/www/tmpchmod 0777 /var/www/tmpmkdir /var/nginx/html/pma/cp -rf /var/www/phpMyAdmin/* /var/nginx/html/pma/vi /etc/login.conf跳到最后,加入MySQL所需的修改:引用:mysql:\:openfiles-cur=2048:\:openfiles-max=4096:\:tc=daemon:使修改生效:cap_mkdb /etc/login.conf安装数据库:/usr/local/bin/mysql_install_db二、修改各软件的配置文件修改nginx的默认配置文件:vi /etc/nginx/nginx.conf增大nginx的并发连接数:引用:worker_connections 51200;加入对.php文件的支持:引用: location / {root /var/nginx/html;index index.php index.html index.htm;}(加入index.php)将下面这段前面的注释都去掉,改成:引用: location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /var/nginx/html$fastcgi_script_name; include fastcgi_params;}注意上面第五行,这个部分原来是/scripts,改成/var/nginx/html。
windows下Nginx和PHP的安装与配置
一.软件准备1.Nginx:/download/nginx-1.0.4.zip2.php:/download/php-5.2.17-Win32-VC6-x86.zip这里需要注意一下,如果使用Apache或Nginx运行php,要选择VC6的线程安全版本,使用IIS选择VC9版本。
所以这里使用前者。
3.RunHiddenConsole:/attachments/660/RunHiddenConsole.zip 用于隐藏命令行窗口。
二.安装php直接解压php-5.2.17-Win32-VC6-x86.zip文件到php的安装目录PHP_PATH,然后在PATH中添加PHP的安装路径PHP_PATH和PHP_PATH/ext。
将PHP_PATH下的php.ini-dist重命名为php.ini,这个就是PHP的配置文件。
然后修改这个文件。
1.将register_globals = Off修改为On,这个选项是为了直接打开全局变量的,例如$POST["varname"]可以直接通过$varname访问。
2.添加php加载的模块。
通过添加extensions=xxx.dll来实现,这样php就可以自动加载相应的模块。
还需要指定需要加载的模块的路径,默认大部分模块的dll文件在PHP_PATH/ext下,所以把这个路径添加到PA TH中即可,前文已经完成这个操作。
三.安装Nginx直接解压nginx-1.0.4.zip到安装路径NGINX_PATH,启动ngix:>cd NGINX_PA TH>nginxNginx的选项:nginx -s signal 向Nginx主进程发送信号,signal取值:stop,quit,reopen,reloadnginx -c filename 用指定的配置文件来初始化nginx,默认是NGINX_PATH/conf/nginx.conf四.Nginx和php配置1.在WIndows环境下,Nginx可以通过FaseCGI守护进程与php 进行交互,这个守护进程是以php-cgi.exe的形式存在的。
lnmp的工作原理
LNMP是一种常用的Web服务器架构,由Linux、Nginx、MySQL和PHP组成。
它的工作原理如下:
1. Linux:作为操作系统,提供稳定和安全的运行环境。
它处理硬件资源管理、进程调度、文件系统等基本功能。
2. Nginx:作为高性能的Web服务器,接收客户端的HTTP请求,并将其转发给后端的应用程序或静态文件。
Nginx使用异步非阻塞的事件驱动模型,可以处理大量并发连接而且具有较低的内存消耗。
3. MySQL:作为关系型数据库管理系统,用于存储和管理网站的数据。
它支持结构化查询语言(SQL)用于数据的读写操作,提供了高效的数据存储和检索机制。
4. PHP:作为服务器端的脚本语言,用于处理动态内容和与数据库的交互。
PHP 解析来自Nginx的HTTP请求,并生成相应的动态内容,然后将结果返回给Nginx,最后再由Nginx发送给客户端。
LNMP架构的工作流程如下:
1. 客户端发送HTTP请求到Nginx服务器。
2. Nginx服务器接收到请求后,根据配置文件中的规则进行请求分发。
如果请求是静态文件(如HTML、CSS、JS、图片等),Nginx直接从磁盘上读取文件并返回给客户端。
如果请求是动态内容,Nginx将请求转发给PHP解析器。
3. PHP解析器接收到动态内容请求后,执行相应的脚本,并与MySQL数据库进行交互。
PHP处理完请求后,生成动态内容,并将结果返回给Nginx。
4. Nginx服务器再将最终的响应结果返回给客户端。
通过这种方式,LNMP架构能够提供高性能、稳定可靠的Web服务,适用于各种规模的网站和应用程序。
linux nginx安装配置文件支持php
linux nginx安装配置文件支持php2010-02-06 14:00 佚名 csdn 字号:t | tLinux Nginx 超越 Apache 的高性能和稳定性,使得国内使用Linux Nginx作为 Web 服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等新兴Web 2.0网站。
AD:51CTO学院:IT精品课程在线看!在向大家详细介绍Linux Nginx之前,首先让大家了解下Linux Nginx,然后全面介绍Linux Nginx,希望对大家有用。
利用Linux Nginx架设高性能的Web环境 Linux Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
Linux Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。
Igor 将源代码以类BSD许可证的形式发布。
Linux Nginx 超越 Apache 的高性能和稳定性,使得国内使用Linux Nginx作为 Web 服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等新兴Web 2.0网站。
实验环境Centos4.51.pcre-7.8.tar.gz 正则表达式下载地址:ftp:///pub/software/programming/pcre/2.nginx-0.7.26.tar下载地址:/3.php-5.2.6.tar.bz2下载地址:/releases/4.php-5.2.6-fpm-0.5.9.diff.gz5.php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi下载地址:/6.注:PHP的版本要和fpm的版本一致mysql-5.0.67.tar.gz7.Discuz!_6.0.0_SC_UTF8.zip1、安装pcre1.# tar -zxvf pcre-7.8.tar.gz2.# cd pcre-7.83.# ./configure4.# make && make install2、安装Linux Nginx1.# tar -zxvf nginx-0.7.26.tar.gz2.# cd nginx-0.7.263.# ./configure --prefix=/usr/local/nginx4.# make && make install1.启动nginx# /usr/local/nginx/sbin/nginx2.停止nginx# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`3.重启nginx kill -HUP `cat /usr/local/nginx/logs/nginx.pid`4.添加到自启动# echo "/usr/local/nginx/sbin/nginx">>/etc/rc.local3、安装mysql1.# tar -zxvf mysql-5.0.67.tar.gz2.# cd mysql-5.0.673.# groupadd mysql4.# useradd -g mysql -s /sbin/nologin -M mysql5.# ./configure --prefix=/usr/local/mysql --with-charset=gbk--with-extra-charset=all --enable-hread-safe-client--enable-local-infile --with-low-memory6.# make && make install7.# cp support-files/f /etc/f8.# chown -R mysql.mysql /usr/local/mysql/9.# /usr/local/mysql/bin/mysql_install_db --user=mysql10.# chown -R root.root /usr/local/mysql/11.# chown -R mysql.mysql /usr/local/mysql/var/启动数据库服务,并添加到自启动1.# /usr/local/mysql/bin/mysqld_safe --user=mysql &2.#cp support-files/mysql.server /etc/rc.d/init.d/mysqld3.#chmod 755 /etc/rc.d/init.d/mysqld加入自动启动服务队列:1.#chkconfig --add mysqld2.#chkconfig --level 345 mysqld on添加root密码3.# /usr/local/mysql/bin/mysqladmin -u root password "123456"4.测试一下:# /usr/local/mysql/bin/mysql -u root -p输入密码:123456,看能不能进入到数据库配置库文件搜索路径1.# echo "/usr/local/mysql/lib/mysql">>/etc/ld.so.conf2.# ldconfig3.# ldconfig -v4.添加/usr/local/mysql/bin到环境变量PATH中5.#echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile6.#source /etc/profile4、安装PHP这里产生的是可执行文件,和apache的不一样,和apache结合的时候产生的是动态库1.# tar -jxvf php-5.2.6.tar.bz22.# gzip -cd php-5.2.6-fpm-0.5.9.diff.gz |patch -d php-5.2.6 -p13.# cd php-5.2.64.# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-fastcgi --enable-fpm5.--with-config-file-path=/usr/local/php/etc --enable-force-cgi-redirect6.# make && make install7.# cp php.ini-recommended /usr/local/php/etc/php.ini8.# vi /usr/local/php/php-fpm.conf1.(1)<value name="listen_address">127.0.0.1:9000</value>修改为<value name="listen_address">IP:9000</value>//本机就用默认的127.0.0.12.(2)下面这两行去掉注释并修改3.<value name="sendmail_path">/usr/sbin/sendmail -t -i</value>4.<value name="display_errors">1</value>5.(3)<value name="user">nobody</value> //去注释6.(4)<value name="group">nobody</value> //去注释7.(5)<value name="allowed_clients">127.0.0.1</value> //允许连接的PC,本机就用127.0.0.1启动php-fpm# /usr/local/php/sbin/php-fpm start添加到自启动# echo"/usr/local/php/sbin/php-fpm start">>/etc/rc.local5、修改Linux Nginx的配置文件,支持PHP1.# vi /usr/local/nginx/conf/nginx.confer nobody;3.worker_processes 8;4.pid /usr/local/nginx/logs/nginx.pid;5.worker_rlimit_nofile 1024;7.{use epoll;8.worker_connections 1024;}9.http{10.include mime.types;11.default_type application/octet-stream;12.server_names_hash_bucket_size 128;13.client_header_buffer_size 32k;rge_client_header_buffers 4 32k;15.client_max_body_size 8m;1.sendfile on;2.tcp_nopush on;3.keepalive_timeout 60;4.tcp_nodelay on;5.fastcgi_connect_timeout 300;6.fastcgi_send_timeout 300;7.fastcgi_read_timeout 300;8.fastcgi_buffer_size 64k;9.fastcgi_buffers 4 64k;10.fastcgi_busy_buffers_size 128k;11.fastcgi_temp_file_write_size 128k;12.gzip on;13.gzip_min_length 1k;14.gzip_buffers 4 16k;15.gzip_http_version 1.0;16.gzip_comp_level 2;17.gzip_types text/plain application/x-javascript text/css application/xml;18.gzip_vary on;19.21.listen 80;22.server_name ;23.root /var/www/blog;24.index index.html index.htm index.php;25.location ~ .*\.(php|php5)?$ {26.root html;27.fastcgi_pass 127.0.0.1:9000;28.fastcgi_index index.php;29.fastcgi_param SCRIPT_FILENAME /var/www/blog$fastcgi_script_name;30.include fastcgi_params;}31.location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$32.{expires 30d;}33.location ~ .*\.(js|css)?$34.{expires 1h;}35.log_format access '$remote_addr -$remote_user [$time_local] "$request" '36.'$status $body_bytes_sent "$http_referer" '37.'"$http_user_agent" $http_x_forwarded_for';38.access_log /var/logs/access.log access;}}注:server部分为PHP虚拟主机127.0.0.1:9000为fastcgi的PC,我这里用的本机/var/www/blog$fastcgi_script_name; 为PHP网页保存的目录测试配置文件:# /usr/local/nginx/sbin/nginx -t6、优化Linux内核参数1.# vi /etc/sysctl.conf2.在末尾增加以下内容:.ipv4.tcp_fin_timeout = 30.ipv4.tcp_keepalive_time = 300.ipv4.tcp_syncookies = 1.ipv4.tcp_tw_reuse = 1.ipv4.tcp_tw_recycle = 1.ipv4.ip_local_port_range = 5000 65000 使配置立即生效:# /sbin/sysctl -p。
nginx+php 502 bad gateway解决方法
502错误最通常的出现情况就是后端主机当机,当然还有。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout,error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:
0s
0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)
发现,问题解决了,执行很长时间也不会出错了。
优化fastcgi中,还可以改改这个值5s 。看看效果
终于发现502的错误其实不是nginx的问题,哈哈
php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误
invalid_header我也没认真查清到底指的什么,我也很想先把它弄下来。
503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。
对nginx fastcgi使用的情况,我现在用得不多,不熟就不乱说了。
四、
nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句502 Bad Gateway,另外还不忘附上自己的大名。
如何用nginx配置wordpress的方法示例
如何⽤nginx配置wordpress的⽅法⽰例之前,我曾⾃⼰搭建过Wordpress,只不过那时候⽤的是第三⽅的虚拟主机,⼀台机器上可能有⼏⼗个⽹站。
那时候的虚拟机还没做到物理层⾯的隔离,⼀个⽹站占⽤资源可能会导致所有⽹站宕机。
最近尝试了下在阿⾥云ecs上搭建了独⽴的wordpress,记录下搭建的过程。
原先我想尝试使⽤apache作为wordpress的容器,⽤nginx作为反向代理直接代理到apache。
但是在我使⽤了apache后,发现了⼀个问题,直接使⽤nginx作为反向代理,转到apache后,url伪静态貌似⽆法访问,好像需要对每⼀个url进⾏nginx的location配置,感觉太过⿇烦,就放弃了。
当然也有可能有其他解决⽅法,不过我没尝试,后来我查询了下nginx是可以利⽤第三⽅插件⽀持php的。
直接利⽤nginx做容器也有优点,部署起来相对简单,多个⽹站也可以直接通过nginx单个容器进⾏部署。
1.域名购买这个就不多讲了,去域名平台申请域名。
2.mysql安装安装mysql的⽅法我之前已经讲过,具体可以看。
安装完成之后,我们需要为wordpress建⽴⼀个单独的账户,为什么要建⽴⼀个单独的账户呢?主要是为了安全考虑,如果wordpress被攻击了,⽽你使⽤了root账户,那么数据库中的所有表都会被暴露。
// 创建wordpress⽤户,并设置密码,密码建议随机⽣成,并且不少于8位,采⽤⼤⼩写,数字,特殊字符组合CREATE USER 'wordpress'@'%' IDENTIFIED BY 'password';//给予wordpress这个账户所有的操作权限,包含 select delete update insert create alter 等GRANT all ON wordpress.* TO 'wordpress'@'%';权限详细信息可以参考。
nginx调用php-fpm出错解决方法和nginx配置详解
nginx调⽤php-fpm出错解决⽅法和nginx配置详解装完了nginx和php-5.5,配置好了nginx调⽤php后,就开始启动php-fpm。
使⽤下⾯的命令复制代码代码如下:/usr/local/php/sbin/php-fpm就可以启动了。
在nginx的⽬录中创建个php的检测脚本index.php悲剧的发现居然⽆法打开。
查看⽇志⽂件,看了下报错原因复制代码代码如下:2013/07/01 22:34:26 [error] 3214#0: *64 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.168.19, server: localhost, request: "GET /index.php HTTP/1.1", upstream:"fastcgi://127.0.0.1:9000", host: "192.168.168.140"查看下端⼝。
看到php-fpm的9000端⼝已经打开了,说明php-fpm是没什么问题的,问题出在了nginx上了。
可能是我的配置⽂件有问题。
找到nginx加载php配置的那块。
另外参考了下⽹上nginx的配置⽂件。
在第69⾏有⼀个调⽤脚本路径复制代码代码如下:fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;我把路径改下,改成下⾯的就可以了。
复制代码代码如下:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;可以出现php的版本信息了。
⼤家还可以参考下⾯的配置⽅法php-fpm不⽤再依赖其它的fastcgi启动器,⽐如lighttpd的spawn-fcgi。
nginx服务在html中嵌入php代码无法显示问题
nginx服务在 html中嵌入 php代码无法显示问题
问题描述
搭建nginx服务后,在index.html文件中嵌入php代码,浏览器会将php代码注释掉,进而不解释php代码。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include
fastcgi_params;
}
然后修改php-fpm中的www.conf文件,修改内容如下:
; Limits the extensions of the main script FPM will allow to parse. This can ; prevent configuration mistakes on the web server side. You should only limit ; FPM to .php extensions toxtensions to ; exectute php code. ; Note: set an empty value to allow all extensions. ; Default Value: .php security.limit_extensions = .php .php3 .php4 .php5 .html // 修改位置,将‘;’去掉,添加.html
解决方法
首先修改nginx.conf配置文件(或者其他的nginx配置文件),修改内容如下:
location ~ \.php|\.html$ { // 修改位置,原内容为:location ~ \.php$ {
在windows的PHP环境下安装Nginx
在windows的PHP环境下安装Nginx。
以前一直是用apache做PHP的web服务器。
现在看看如何安装Nginx作为PHP的web 服务器。
1. 下载Ngix : /download/nginx-1.1.12.zip写这篇文章时,windows的最新版本。
2. 下载PHP与Nginx的cgi连接: /attachments/660/RunHiddenConsole.zip。
3. 将下载的Nginx解压到E:\nginx目录下。
4.修改E:\nginx\conf中的nginx.conf配置文件。
修改后如下:(去掉了没用的,可以直接复制,覆盖nginx.conf,只需修改第四步和第七步的项目目录即可。
)[sql]view plaincopy1.worker_processes 1;2.3.error_log logs/error.log; #第一步:打开错误日志4.5.events {6. worker_connections 1024;7.}8.9.http {10. include mime.types;11. default_type application/octet-stream;12. sendfile on;13. keepalive_timeout 65;14. server {15. listen 8088; #第二步:修改端口16. server_name localhost;17.18. charset utf-8; #第三步:修改字符集19.20. location / {21. root E:/workspace; #第四步:修改项目目录22.index index.php index.html index.htm; #第五步:加入indx.php23. autoindex on24. }25.26.27. error_page 500 502 503 504 /50x.html;28. location = /50x.html {29. root html;30. }31.32.33. location ~ \.php$ { #第七步:打开php的location,并进行如下配置34. root E:/workspace;35. fastcgi_pass 127.0.0.1:9000;36. fastcgi_index index.php;37. fastcgi_param SCRIPT_FILENAME E:/workspace$fastcgi_script_name; #修改成项目目录38. include fastcgi_params;39. }40.41.42. }43.}5. 打开php.ini。
Nginx安全加固
Nginx实例分析实例10.24.10.203:808Nginx文件类型错误解析漏洞利用方式Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。
配置文件中会有类似如下内容。
演示:服务器:10.24.10.203Nginx 版本:0.8.33测试URL:http://10.24.10.203:808/1.jpg/1.php1.选择上传:上传一个jpg图片,图片内包含php代码。
2.通过返回的路径,获取图片地址:3.利用解析漏洞,执行php代码:修复方法解决方案:C:\php5\php.inicgi.fix_pathinfo值为1,就存在问题。
1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0;Nginx配置错误而导致目录遍历漏洞利用方式在Nginx的配置文件中如果开启了autoindex选项,并采用类似下面的配置时会造成目录遍历漏洞当访问http://10.24.10.203:808/files/这个URL时,正常情况应该遍历html/test/这个目录,但是如果访问http://10.24.10.203:808/files../,这个URL时,则会遍历上一级目录(html/)了。
修复方法见下图,保持location和alias中内容一致。
Nginx安全加固针对Nginx的安全加固,主要从以下两个方面考虑:一、Nginx Web Server程序本身是否安全,如是否存在安全漏洞;二、Nginx Web Server是否提供了可使用的安全功能,这部分主要是检查Nginx的配置是否得当,是否存在由于配置失误导致的安全问题。
在选择Nginx版本时,需要关注是否存在安全漏洞和版本的稳定性。
一般选择最新的稳定版本,这样可以在稳定性和安全之间取得一个平衡。
在升级Nginx版本前建议先在测试环境中测试通过后再正式升级,以避免由于兼容性带来其他不可预知的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--enable-discard-path \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-sockets
--with-libdir=/usr/lib64
./configure --prefix=/usr/local/php --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --disable-ipv6 --with-curl --enable-dio --with-zlib-dir --with-dom --with-gd --with-jpeg-dir=/usr/local/jpeg6 --with-freetype-dir --with-iconv --enable-mbstring=cn --with-mysql=/usr/local/mysql --with-snmp --enable-sockets --enable-magic-quotes --enable-exif --with-apxs2=/usr/local/apache228/bin/apxs
--with-poll_module \
--with-pcre=./pcre-7.6 \
--with-zlib=./zlib-1.2.3
./configure --prefix=/usr/local/php-fcgi \
--with-mysql=/usr/local/mysql \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir=/usr/lcoal/jpeg6 \
--with-png-dir \
--with-zlib \
--with-gd \
--with-libxml-dir \
--enable-xml \
--disable-debug \
fastcgi_read_timeout 300;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/htdocs/$fastcgi_script_name;
root /usr/local/htdocs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
1.编译nginx和php,编译之前先装好php相关的包
./configure --prefix=/usr/local/nginx \
--with-http_perl_le \
--with-http_gzip_static_module \
--with-http_stub_status_module \
对于php4,和上面类似,启动方式有点差别,如下:
/usr/local/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 64 -u nobody -f /usr/local/php-fcgi/bin/php
3.配置nginx.conf
server {
2.借用lighttpd的spawn-fcgi启动php-cgi进程,监听127.0.0.1的9000端口,
进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为nobody:
/usr/local/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 64 -u nobody -f /usr/local/php-fcgi/bin/php-cgi
--enable-fastcgi \
--enable-discard-path \
--enable-force-cgi-redirect \
--disable-ipv6 \
--with-curl \
--enable-dio \
--with-zlib-dir \
--with-dom \
include fastcgi_params;
}
}
--with-gd \
--with-jpeg-dir=/usr/lcoal/jpeg6 \
--with-freetype-dir \
--with-iconv \
--enable-mbstring=cn \
--with-mysql=/usr/local/mysql \
--with-snmp \
--with-curlwrappers \
--enable-mbregex \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-mbstring
php4
./configure --prefix=/usr/local/php-fcgi \
listen 80;
server_name ;
root /usr/local/htdocs;
index index.html index.htm index.php;
location ~ \.php$ {