lnmp搭建中出现的问题
来源:互联网 发布:mac必备软件 编辑:程序博客网 时间:2024/06/06 18:02
为了做监控,就试着搭了下lnmp。碰到了一些问题,找了不少资料,终于解决。
系统 ubuntu 14.10
nginx,php5 mysql都是通过apt-get 安装的。网上教程很多,这里就略去安装介绍。
问题主要出在nginx以及php的配置上面
值得注意的是,apt-get 安装的nginx版本挺新 1.6,其中有些配置文件和老版本有略微出入。老版本配置文件为nginx.conf ,虚拟主机都定义在里面,新版的则定义到/etc/nginx/sites-available/default 文件中,nginx目录下还有一个/etc/nginx/sites-enabled/default 的配置文件,为软连接。虚拟主机都在该配置文件中定义。
## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
上述代码为nginx.conf中定义。
按照网上教程搭好lnmp之后,用info.php测试
<?phpphpinfo();?>却出现了502 bad gatewayd的错误,好是一番折腾之后最终解决了,/etc/nginx/sites-available/default部分内容如下:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # <span style="color:#FF0000;">fastcgi_pass 127.0.0.1:9000;</span> # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; <span style="color:#FF0000;">fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;</span> include fastcgi_params; }
网上教程基本上都是取消了 fastcgi_pass 127.0.0.1:9000; 的注释,然后将 fastcgi_pass unix:/var/run/php5-fpm.sock; 注释掉,这样以来nginx要解析php页面其实是将请求转发到127.0.0.1:9000 上来处理。但是通过netstat -ltpn | grep :9000 根本没有相关的端口开启
通过查看 /etc/php5/fpm/pool.d/www.conf
; The address on which to accept FastCGI requests.; Valid syntaxes are:; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on; a specific port;; 'port' - to listen on a TCP socket to all addresses on a; specific port;; '/path/to/unix/socket' - to listen on a unix socket.; Note: This value is mandatory.listen = /var/run/php5-fpm.sock
可以看到默认的监听方式为sock方式,所以端口监听方式就不行了。而sock监听方式也相对效率高一些。
当然光是修改这个还不够,需要注意的还有 fastcgi_param 参数。如果不写的话,虽然没了502错误,但是php页面上也是一片空白,不能正常显示。
关于这个问题这篇文章分析的很到位:
http://www.xker.com/page/e2012/1209/122251.html
大概意思如下:
Below is an example of the minimally necessary parameters for PHP:
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
Parameter SCRIPT_FILENAME is used by PHP for determining the name of script to execute, and QUERY_STRING contains the parameters of the request.
所以 我们在没有定义SCRIPT_FILENAME这个系统变量的时候 php是没法解释执行的
还有一个问题值得注意,新版的nginx提供了对IPv6的支持,所以在配置文件中有这么一行
server { listen 80 default_server;# listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm index.php; # Make site accessible from http://localhost/ server_name localhost;但是我在本地将IPV6给禁了,所以启动的时候会出现
nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
只要将defaul中的有关ipv6部分注释掉就好了。(配好之后记得用nginx -t -c nginx.conf 进行检查)
- lnmp搭建中出现的问题
- Ubuntu 16 搭建 LNMP(安装过程出现的问题有红色备注)
- LNMP环境搭建遇到的问题
- 搭建 LNMP 环境是遇到的问题
- linux中lnmp环境的搭建
- Linux中Web环境的搭建LNMP
- 平台搭建中出现的小问题
- Hadoop搭建过程中出现的问题
- Ubuntu 搭建LNMP环境---及过程中所遇见的问题的相关解决方法
- LNMP环境的搭建
- LNMP环境的搭建
- lnmp环境的搭建
- LNMP环境的搭建
- LNMP之编译安装PHP出现的问题
- 关于Centos7下搭建LNMP环境的问题小结
- 搭建LNMP环境过程及可能遇到的问题
- Centos 中搭建LNMP环境
- Android环境搭建中可能出现的问题
- 把linux,ssh客户端蓝色变成绿色
- SDUTOJ 2143 图结构练习——最短路径 邻接链表 SPFA算法
- NodeJS on Nginx: 使用nginx反向代理处理静态页面
- Vs2008 编写com,MFC编写客户端调用
- linux 系统tomcat启动显示成功,web程序页面打不开
- lnmp搭建中出现的问题
- 查看oracle数据库的连接数以及用户
- JavaWeb学习笔记 ---- Jsp基础知识归纳篇(上)
- C++中string
- Qt中new与delete
- 程序员解决问题的60个策略
- redis2.8新增功能说明
- Mockito实例-Junit & Mockito
- python - easy_install的安装和使用