分类: LINUX
2018-08-14 09:40:13
LNMP架构搭建:nginx+mysql+php
什么是CGI
CGI的全称为“通用网关接口" (Common Gateway Interface),为HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序必须运行在网络服务器上。
传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给HTTP服务器 这在处理高并发访问时几乎是不可用的,因此就诞生了FastCGl 另外,传统的CGI接口方式安全性也很差,所以现在已经很少被使用了。
什么是FastCGI
FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(在Linux下FastCGI接口即为socket,这个socket可以是文件socket,也可以是IP socket),主要优点是把动态语言和HTTP服务器外离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache, Nginx和Lighttpd等。
同时FastCGI也被许多脚本语言所支持,例如当前比较流行的脚本语言PHP。FastCGI接口采用的是C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
FastCGI的重要特点如下:
(1)HTTP服务器和动态脚本语言间通信的接口或工具。
(2)可把动态语言解析和HTTP服务器分离开。
(3)Nginx, Apache, Lighttpd,以及多数动态语言都支持FastCGl。
(4)FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)。
(5)PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgiprocess mangement)).
(6)HTTP服务器通过(例如Nginx fastcgi_pass) FastCGI客户端和动态语言FastCGl服务器端通信(例如 php-fpm)。
Nginx FastCGI 的运行原理
Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,为了调用CGI程序.还需要一个FastCGl的wrapper (可以理解为用干启动另一个程序的程序),这个wrapper绑定在某个固定的socket上,如端口或文件socket,当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口, wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着, wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx ;最后, Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。
需要3台虚拟机分别按照nginx mysql php
一Nginx ----------------------------------二MySQL-----------------------------三PHP
192.168.10.11-------------------------192.168.10.14----------------192.168.10.15
三台配置基础环境 相互可ping通
Nginx安装步骤
拖包nginx-1.6.0.tar.gz
安装:
yum install gcc* perl openssl openssl-devel –y //安装Perl库
useradd -M -s /sbin/nologin nginx //创建Nginx用户 默认是nologin
tar -zxvf nginx-1.6.0.tar.gz
cd nginx-1.6.0
yum install pcre-devel zlib-devel -y
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make
make install
优化路径:
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //优化路径
nginx -t //初始化文件
killall -s QUIT nginx //-s指定信号的种类 QUIT停止Nginx
killall -s HUP nginx //HUP重载Nginx
nginx // 启动Nginx服务
netstat -anpout | grep 80 //检测端口 Nginx是80端口 显示如下
[root@localhost nginx-1.6.0]# netstat -anpout | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7104/nginx off (0.00/0/0)
tcp 0 0 :::51808 :::* LISTEN 1856/rpc.statd off (0.00/0/0)
测试:两种访问方式 elinks 或者firefox
yum install -y elinks //安装elinks
elinks //访问本机IP地址
firefox 192.168.10.11
MySQL安装步骤:
拖包cmake-2.8.7.tar.gz mysql-5.5.22.tar.gz
rpm -qa | grep mysql //检测一下本机有没有安装MySQL
mysql-devel-5.1.71-1.el6.x86_64
mysql-libs-5.1.71-1.el6.x86_64
mysql-5.1.71-1.el6.x86_64
mysql-server-5.1.71-1.el6.x86_64
rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps
基本留着server或者libs即可
安装:
//使用cenos虚拟机 需要先安装bison-2.5.tar
tar -zxvf cmake-2.8.6.tar.gz -C /usr/src/
cd /usr/src/cmake-2.8.6/
yum install gcc* -y
./bootstrap
gmake
gmake install
cd
useradd -M -s /sbin/nologin mysql -g mysql //检测有没有MySQL用户
groupadd mysql //建立MySQL组
useradd -M -s /sbin/nologin mysql -g mysql //建立MySQL用户
tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/
cd /usr/src/mysql-5.5.22/
yum -y install ncurses-devel
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
报错的话:rm -rf CMakeCache.txt 删除
yum install ncurses-devel -y
重新执行:cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
make
make install //安装完成
优化:
ln -s /usr/local/mysql/bin/* /usr/local/bin/
chown -R mysql:mysql /usr/local/mysql/
cde
cd
rm -rf /etc/my.cnf
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
Installing MySQL system tables...
OK
Filling help tables...
OK
显示两个OK成功
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile //设置环境变量
cd /usr/src/mysql-5.5.22/
. /etc/profile //执行 前两步加起来是还原环境变量
cp support-files/mysql.server /etc/rc.d/init.d/mysqld //添加到系统服务
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld //加入开机启动项
service mysqld start
/etc/init.d/mysqld status
netstat -anput | grep mysqld //查看MySQL状态 端口号3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 51063/mysqld
mysql -u root -p //登录
Enter password: //没有密码直接回车
mysql>exit //退出MySQL
PHP安装
拖包php-5.3.28.tar.gz
yum install gcc* -y
tar -zxvf php-5.3.28.tar.gz
cd php-5.3.28
yum -y install gd libxml2-devel libjpeg-devel libpng-devel
./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php --enable-fpm --enable-mbstring --with-jpeg-dir=/usr/lib
make && make install
cp php.ini-development /usr/local/php/php.ini
vim /usr/local/php/php.ini //修改配置文件
default_charset = "utf-l8"
short_open_tag = On
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
cd /usr/local/php/etc/
php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
pid = run/php-fpm.pid
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
service php-fpm restart //重启服务
Gracefully shutting down php-fpm . done
Starting php-fpm done
安装完成
整合Nginx与PHP
Nginx服务器:
mkdir /www
useradd nginx
passwd nginx
chown -R nginx.nginx /www/
vim /usr/local/nginx/conf/nginx.conf
location / {
root /www;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /www;
fastcgi_pass 192.168.10.15:9000; //PHP IP地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
killall -s HUP nginx //重新启动
PHP服务器:
mkdir /www
useradd nginx
passwd nginx
chown -R nginx.nginx /www
vim /usr/local/php/etc/php-fpm.conf
listen = 192.168.10.15:9000
user = nginx
group = nginx
service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
在PHP上建立nfs共享目录
vim /etc/exports
/www 192.168.10.0/24(rw,no_root_squash,sync)
service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
Nginx服务器:
showmount -e 192.168.10.15
Export list for 192.168.10.15:
/www 192.168.10.0/24
mount -t nfs 192.168.10.15:/www /www
vim /www/index.php
phpinfo();
?>
firefox 192.168.10.11/index.php //访问Nginx本机IP地址 出现PHP页面成功
整合PHP与MySQL
Nginx服务器:
rm -rf /www/index.php
MySQL服务器:
mysql -u root –p
mysql> grant all on *.* to 'root'@'192.168.10.%' identified by '123.com';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec
mysql> exit
Bye
mount -t nfs 192.168.10.14:/www /www/ //注意IP地址是PHP服务器的
PHP或者MySQL服务器:
拖包Discuz_7.2_FULL_SC_UTF8.zip
unzip Discuz_7.2_FULL_SC_UTF8.zip
mv upload/* /www/
chmod -R 777 /www/*
firefox 192.168.10.11/install //PHP访问Nginx IP地址
出现Discuz!安装向导
点击“我同意” ----- 开始安装 点击“下一步”-------安装数据库 填写即可
数据库服务器为mysql服务器IP地址数据库名跟密码是登录用户跟密码