① Nginx+php(FastCGI)高性能服务器怎么搭建呢
Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web服务器安装 APC模块安装 linux apc 配置安装
参考资料 http://wgkgood.gicp.net问题补充:
不是 主要是网络不收录 他们说经常在网络知道什么的提问题,然后发表一些好文章附带自己的网站,这样会收录快一些,谢谢一楼!谢谢大家的支持!
最佳答案 Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web服务器安装 APC模块安装 linux apc 配置 fastCGI安装配置3前言*
Nginx+php(FastCGI)+Memcached+Mysql+APC 是目前主流的高性能服务器搭建方式!适合大中型网站,小型站长也可以采用这种组合!
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括国内最大的电子地图MapBar、新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等新兴Web 2.0网站,更多的网站都在使用Nginx配置。
【Nginx+php(FastCGI)+Memcached+Mysql+APC Nginx高性能web服务器安装 APC模块安装 linux apc 配置 fastCGI安装配置】
下载所需的安装包:这里采用源码包编译安装:本博客集成下载
http://wgkgood.gicp.net/download/nginx-0.7.61.tar.gz
http://wgkgood.gicp.net/download/pcre-8.01.tar.gz
http://wgkgood.gicp.net/download/memcache-2.2.5.tgz
http://wgkgood.gicp.net/download/libevent-1.4.12-stable.tar.gz
http://wgkgood.gicp.net/download/APC-3.1.4.tgz
下载到 /usr/src下
另外还有两个包mysql-5.1.41.tar.gz、php-5.3.5.tar.gz 【其他相似版本也可以!】可以在官网下载。
一、正式安装Nginx、【安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等】
(1)首先安装pcre:
cd /usr/src &&tar xzf pcre-8.01.tar.gz &&cd pcre-8.01 && ./configure –prefix=/usr/local/pcre &&make &&make install
(2)、然后再安装nginx :
useradd www && cd /usr/src && tar xzf nginx-0.7.61.tar.gz &&cd nginx-0.7.61 && ./configure –prefix=/usr/local/nginx –with-http_stub_status_mole –with-openssl=/usr/ –with-pcre=/usr/src/pcre-8.01 –user=www –group=www &&make &&make install
【nginx注意* –with-pcre=/usr/src/pcre-8.01指向的是源码包解压的路径,而不是安装的路径,否则会报
make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误】
二、接下来安装mysql
cd /usr/src && tar xzf mysql-5.1.41.tar.gz && cd mysql-5.1.41 && ./configure –prefix=/usr/local/mysql/ –enable-assembler –with-extra-charsets=complex –enable-thread-safe-client –with-big-tables –with-readline –with-ssl –with-embedded-server –enable-local-infile –with-plugins=innobase && make &&make install
(2)、mysql安装完毕,创建mysql用户和组并初始化数据库,并启动数据库。
cd /usr/local/mysql && useradd mysql && chown -R mysql:mysql /usr/local/mysql && /usr/local/mysql/bin/mysql_install_db –user=mysql && chown -R mysql:mysql var/ && ./bin/mysqld_safe –user=mysql &
即可。【如果mysql启动报错,请检查 /usr/local/mysql/var 目录,mysql是否有权限】
三、安装 php :
cd /usr/src &&tar xzf php-5.3.5.tar.gz && cd php-5.3.5 && ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-mysql=/usr/local/mysql –with-mysqli=/u
sr/local/mysql/bin/mysql_config –with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-li
bxml-dir=/usr –enable-xml –disable-rpath –enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem
–enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-fpm –enable-sockets && make &&make install
安装完毕!【注意这个参数在此可以不加–enable-fastcgi;其他之前版本需要加上,以上安装根据自己的选择添加,如果报错,根据具体报错找原因】
四、整合Nginx和php(FastCGI)安装完php-5.3.5后支持fastCGI
(1)、配置nginx ,拷贝nginx配置文件:
user www www;
worker_processes 8;
error_log /usr/local/logs/nginx/error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name wgkgood.gicp.net;
index index.php index.htm index.html;
root /usr/webapps/www;
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /usr/local/logs/nginx/access.log access;
}
}
Nginx配置完毕!启动nginx ;/usr/local/nginx/sbin/nginx 即可,重启nginx命令如下/usr/local/nginx/sbin/nginx –s reload
此配置文件仅供参考,感谢张宴老师!
(2)、配置fcgi.conf文件如下
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
五、配置php配置文件:
cd /usr/local/php5/etc/ && cp
php-fpm.conf.default php-fpm.conf 然后根据提示修改php-fpm.conf里面的选项。
配置完毕后,启动php-fpm
cp /usr/src/php-5.3.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 然后启动 /etc/init.d/php-fpm start 即可。
六、安装apc配置:
cd /usr/src && tar xzf APC-3.1.4.tgz &&cd APC-3.1.4
/usr/local/php5/bin/phpize 【增加扩展模块】
./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php5/bin/php-config
&&make&& make install
安装完后会生成一个apc.so在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/里面。
七、安装memcached,使fastcGI支持memcached
首先安装libevent,
cd /usr/src && tar xzf libevent-1.4.12-stable.tar.gz && cd libevent-1.4.12-stable && ./configure –prefix=/usr/local/libevent &&make && make install
然后安装memcached
tar xzf memcache-2.2.5.tar.gz && cd memcache-2.2.5 && /usr/local/php5/bin/phpize && ./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent –with-php-config=/usr/local/php5/bin/php-config &&make &&make install
安装完后,会在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/里生成一个memcache.so 这个模块:
八、接下来修改php.ini
默认的php.ini在/usr/local/php5/lib/php.ini 你也可以指定:
extension_dir = “./”
修改为
extension_dir=”/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626〃
把下面这些添加到最后:
extension = apc.so
extension=memcache.so //这里引用缓存模块
[APC]
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl = 3600
apc.cache_by_default = on
安装到此已经完成!
重新启动nginx和php-fpm ,用测试页面访问。
此文章仅供参考!有不妥之处欢迎指正!共同学习!
http://wgkgood.gicp.net 本博客采用的nginx+fastcGI+mysql+memcached+apc完美架构整合!
感谢张宴老师
http://blog.s135.com/nginx_php_v6/
② php-fpm 找不到 php-cgi.sock 怎么办
如果php-fpm已经启用了,那么就是你的nginx或者apache是通过使用tcp方式连接php-fpm的
如果要用socket方式连接,就是php-cgi.sock,要修改php-fpm配置文件并且重启
php-fpm配置中有(还有种配置文件时xml格式的,你可以看下参考)
#listen = 127.0.0.1:9000
#找到并改为
listen=/tmp/php-fpm.sock
详细信息可以参考:
http://www.tocus.com.cn/?send=article_show&id=228&class=2
希望对你有帮助
③ 了解PHP-FPM
在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢?
PHP-FPM,就是PHP的FastCGI管理器,用于替换PHP FastCGI的大部分附加功能,在PHP5.3.3后已经成为了PHP的标配。
有小伙伴要问了,FastCGI又是什么鬼?CGI程序又叫做“通用网关接口”,就是让Web服务器和你的应用程序进行交互的一个接口。就像nginx中需要配置的fastcgi_pass,一般我们会使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock来配置这个参数。它的意思就是告诉nginx,过来的请求使用tcp:9000端口的监听程序来处理或者使用unix/socket来处理。它们都是指向的PHP运行程序。
再说得通俗一点,我们运行php脚本用的是
php-fpm就相当于是这个php命令。nginx通过fastcgi_pass来运行php $nginx_root(nginx配置文件中网站根目录root配置)下的index.php。所以,如果你用的是python或者其他什么语言,都可以用它们的cgi程序来让nginx调用。
FastCGI和CGI又有什么不同呢?FastCGI是启动一个socket接口,服务器应用不需要自己去运行php,只需要向这个socket接口提交请求就可以了。
php-fpm在编译php时需要添加--enable-fpm。一些通用的集成安装包如lnmp、phpStudy等都会默认编译并使用php-fpm,毕竟是标配。
上文中说过nginx可以使用127.0.0.1:9000和unix:/tmp/php-cgi.sock这两种方式来调用php-fpm。它们有什么区别呢?
前者,一般带9000端口号的,是tcp形式的调用。也就是php-fpm启动了一个监听进程对9000端口进行监听。它会调起一个tcp/ip服务,nginx在调用的时候会走一次tcp请求流程,也就是3次握手4次挥手,会走到网络七层中的第四层传输层。相对来说这种方式性能会稍差一点,启动php-fpm后使用nestat查看端口中会出现9000端口的占用。
后者,使用的是unix套接字socket服务,通过sock文件来交换信息,性能相对好一些,因为它没有tcp连接过程,也不会有9000端口的占用。
对于高负载大访问量的网站还是推荐使用unix方式,对于普通小网站来说,无所谓使用哪个都可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默认的监听方式。
php-fpm.conf配置中的listen属性用来配置监听,这里的配置要和nginx中的一致,使用tcp的就监听127.0.0.1:9000,使用unix的就设置成/tmp/php-cgi-56.sock。
以下内容摘自官方文档:
===========
各自媒体平台均可搜索【硬核项目经理】
④ Nginx跟php和mysql数据库怎么连接的
nginx 通过libevent 建立了网络连接池,通过nginx的 fast_cgi配置 (fastcgi_pass ip:port),用tcp 127.0.0.1:9000 方式连接 或者 unix socket unix:///var/run/unix.sock 方式 连接,php 与mysql 通过 php _ mysql* 扩展,实现的tcp连接 (可以持久连接或非持久连接)
⑤ ubuntu nginx可否使用php
能用,具体的1.安装Nginx
apt-get install nginx
2.启动Nginx
service nginx start
3.访问服务器IP
如果看到“Welcome to nginx!”说明安装好了。
4.安装PHP
apt-get install php5-fpm
5.配置Nginx
找到下列代码,去掉相应注释
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}希望能帮到你,我还要自己在后盾人平台努力学习呢,一起加油吧😄∠( ᐛ ”∠)_
⑥ 502 Bad Gateway的可能原因,及解决方法
一:可能的原因是php-fpm未开启,查看php-fpm状态,若未开启,开启后重试
开启php-fpm,查看状态
systemctl start php73-php-fpm
systemctl status php73-php-fpm
重新打开网页
第二次遇到502
第二次遇到502,上面的方法试了,但是问题没有解决
感觉有可能是配置问题,最终参照 https://blog.csdn.net/ucmir183/article/details/80240112 的解决方法,解决了
我的配置里面是这样的
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
输入命令 netstat -tlnp | grep 9000 并没有监听9000的程序
Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
在配置文件中看了一下,发现初始化时就有一个文件
查阅了自己以前的配置,以前使用php7.2与php7.3时是没有这个文件的
于是把这个文件删除是了一下,重启nginx报错
好奇心驱使,进入文件看了一下
于是进入自己配置的文件中,修改
重启nginx服务器,问题解决
参考地址:https://blog.csdn.net/ucmir183/article/details/80240112
⑦ php-fpm 找不到 php-cgi.sock 怎么办
php-fpm有两种listen方式,一种是通过端口来操作,一种是sock文件。
在nginx的server配置当中,如果设置为fastcgi_pass unix:/tmp/php-cgi.sock的话,有可能会出现502错误,这是以为nginx此项没有找到php-cgi.sock文件或者权限问题导致的,我们也可以改成fastcgi_pass:127.0.0.1:9000来修正这个错误 。
当我们用php-fpm来管理我们的php启动时,按照如下的配置,就会自动生成/tmp/php-cgi.sock文件,然后再访问的话就不回出现502 Gateway错误了。配置如下:
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
user = www
group = www
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
注:将php.ini里的cgi.fix_pathinfo设置为0,不然会有漏洞~
⑧ linux配置nginx+php,但是无法访问PHP文件,能访问html
nginx调用PHP有sock方式和端口方式
1、确认nginx已经调用了php;
2、先确认你的nginx使用什么方式调用PHP;
3、如果使用端口方式,端口对不对应,如果使用SOCK方式,那么路径对不对;
⑨ nginx 只让php入口文件访问,其他php文件禁止直接访问
你用的系统是微擎吗?
正常来说,除了这两个php文件,和回调用的接口外,其它php都是不能直接访问的,文件头有常量判断,未定义就退出了。
所以你的系统有上传漏洞,应该检查是哪里出了问题,并去修复一下。可以从以下几点着手:
上传权限仅提供给已登录会员,在上传接口中判断未登录状态的,直接返回错误信息
上传文件类型限制,如果需要的是图片,严格限制图片类型,并做图片规格检测(gd库就可以处理),不符合的不保存文件
文件名处理,不要使用客户端上传的文件名保存,而是根据规则 生成一个随机的名字保存
上传频率限制(根据会员限制),比如,一个小时内限制上传5张,一天限制100张,可以有效防止黑客利用上传接口填充垃圾文件到你的服务器
如果可行,对上传文件做一个临时机制,如上传的文件先放到临时文件夹,资料保存的时候,把文件处理一下,移动到正常的附件目录。这样就可以定期清理临时文件夹,防止上传后没使用的文件过多占用服务器空间。
不过这个功能改起来会复杂一点,要处理所有使用到上传功能的接口。
以上几点处理好,被上传可执行文件的问题基本上可以杜绝了
而你的解决方案,是只治标不治本的方案
⑩ 如何正确配置 Nginx 和 PHP
直接贴上代码逐行进行讲解,此处贴出一个能正常启动php脚本的最简nginx vhost配置:
[plain] view plain
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了。