PHP环境如何搭建?PHP环境搭建(详解)
来源:小白
发布时间:2018-10-25 14:04:16
阅读量:1033
PHP环境如何搭建?本篇文章给大家带来的内容是PHP环境如何搭建?PHP环境搭建(详解)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。
按照文章的步骤操作,可以帮助你在CentOS6.*系统上搭建一个LNMP环境或者LAMP环境。这些环境可以作为服务器的线上运行环境。
LNMP
准备工作
安装wget
wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议下载,并可以可以使用HTTP代理。
安装net-tools
最小化安装CentOS7时如果无法使用ifconfig命令,则需要安装net-tools(如果是安装的CentOS6版本则无需安装)
1 | sudo yum install net-tools
|
更新yum源
安装vim
配置显示行号
1 2 | vim ~/.vimrc
输入: set nu 后退出保存
|
安装Nginx
安装依赖
(1) 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装gcc-c++。
(2) PCRE是一个Perl库,中文"Perl兼容的正则表达式库"。安装Nginx是为了使Nginx支持具备URI重写功能的rewrite模块,如果不安装pcre库,则Nginx无法使用rewrite模块功能,Nginx的Rewrite模块功能几乎是企业应用必须。
(3) zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
(4) OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要安装 OpenSSL 库 。
1 2 | yum -y install gcc gcc-c++ zlib zlib-devel
yum -y install pcre pcre-devel openssl openssl-devel
|
说明:yum安装方式安装的pcre版本比较低,不过基本不影响使用
检查基础依赖包
1 2 3 4 | rpm -qa pcre pcre-devel
rpm -qa zlib zlib-devel
rpm -qa openssl openssl-devel
rpm -qa pcre pcre-devel
|
编译安装Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | cd ~
这里我们默认把安装包都放在了/usr/src目录下
cd /usr/src #切换到软件包目录
wget https:
useradd nginx -s /sbin/nologin -M #创建nginx用户用于管理nginx程序
tar zxvf nginx-1.14.0.tar.gz #解压nginx源码包
cd nginx-1.14.0
#预编译
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx-1.14.0 \
--with-http_stub_status_module \
--with-http_ssl_module
make #编译
make install #安装
cd /usr/local
ln -s nginx-1.14.0 nginx #创建nginx的软链接
|
配置环境变量
1 2 3 | vim /etc/profile
export PATH= "/usr/local/nginx/sbin:$PATH"
source /etc/profile
|
开机自启
1 2 3 | vim /etc/rc.local
# Nginx开机自启
/usr/local/nginx/sbin/nginx &
|
安装说明
编译Nginx软件时,可以使用configure--help查看相关帮助。下面是本次编译时指定的参数及简单说明:
1 2 3 4 5 | --prefix=PATH #设置安装路劲
--user=USER #进程用户权限
--group=GROUP #进程用户组权限
--with-http_stub_status_module #激活状态信息
--with-http_ssl_module #激活ssl功能
|
语法检查
安装完Nginx后,并不能直接对外提供服务,需要先启动Nginx服务才行,具体操作如下。
1 | /usr/local/nginx/sbin/nginx -t
|
Nginx命令
1 2 3 4 5 | /usr/local/nginx/sbin/nginx #启动
/usr/local/nginx/sbin/nginx -s stop #立即停止
/usr/local/nginx/sbin/nginx -s quit #平滑停止
/usr/local/nginx/sbin/nginx -s reload #重载配置
/usr/local/nginx/sbin/nginx -s reopen #重开日志
|
服务启动检查
1 2 | sudo yum install lsof
lsof -i :80
|
关闭防火墙
1 2 3 4 5 6 7 8 | CentOS6:
service iptables stop 临时关闭
chkconfig --level 2345 iptables off 永久关闭
CentOS7:
systemctl stop firewalld.service #令关闭防火墙
systemctl disable firewalld.service #关闭防火墙开机自启动
通过浏览器输入IP测试是否成功
|
安装MySQL
安装依赖
(1)cmake是新版MySQL的编译工具
1 2 3 | sudo yum install gcc gcc-c++ cmake ncurses-devel
如下的几个依赖在CentOS7中需要安装,CentOS6不需要
sudo yum install perl perl-devel autoconf
|
编译安装MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | useradd -s /sbin/nologin -M mysql # 添加MySQL用户
wget https:
tar zxvf mysql-5.6.41.tar.gz
cd mysql-5.6.41
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.41 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.41/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.41/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306
make && make install
|
配置
1 2 3 4 5 6 7 | cd /usr/local/mysql-5.6.41
chown mysql.mysql /usr/local/mysql-5.6.41/data
mkdir tmp
chown mysql.mysql /usr/local/mysql-5.6.41/tmp
rm -f /etc/my.cnf
cp support-files/my- default .cnf /etc/my.cnf
scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
|
加入守护进程
1 2 3 4 5 | cd /usr/local
ln -s mysql-5.6.41 mysql
cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
|
配置环境变量
1 2 3 | vim /etc/profile
export PATH= "/usr/local/mysql/bin"
source /etc/profile
|
启动MySQL
1 2 3 | service mysqld start
mysql -u root -p #第一次登陆不需要密码,回车即可
set password for root@localhost = password( 'root' ); #修改密码
|
安装PHP
安装依赖
1 | sudo yum install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel
|
编译安装PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | cd ~/package
wget http:
tar zxvf php-7.2.10.tar.gz
cd php-7.2.10
./configure \
--prefix=/usr/local/php-7.2.10 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-zlib \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-gd \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-openssl \
--with-curl \
--enable-mbstring \
--enable- static \
--enable-zip \
--enable-sockets \
--enable-xml
make && make install
|
编译参数详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ./configure \
--prefix=/usr/local/php-7.2.7 \ # 指定安装路径
--enable-fpm \ # 表示激活PHP-FPM方式服务,即FactCGI方式运行PHP服务。
--with-fpm-user=nginx \ # 指定PHP-FPM进程管理的用户为www,此处最好和Nginx服务用户统一。
--with-fpm-group=nginx \ # 指定PHP-FPM进程管理用户组为www,此处最好和Nginx服务用户组统一。
--with-zlib \ # 打开zlib库的支持,用于http压缩传输
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-gd \ # 打开gd库的支持
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-openssl \ # 打开openssl,加密传输时用到
--with-curl \ # 打开curl浏览工具的支持
--enable-mbstring \ # 多字节,字符串的支持
--enable- static \ # 生成静态链接库
--enable-zip \ # 打开对zip的支持
--enable-sockets \ # 打开 sockets 支持
--enable-xml
|
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | cd /usr/local
ln -s php-7.2.10 php
cp /usr/src/php-7.2.10/php.ini-development /usr/local/php-7.2.10/lib/php.ini
vim /usr/local/php/lib/php.ini
date .timezone = PRC (大约在932行)
expose_php = Off #避免PHP信息暴露在http头中(大约369行)
display_errors = Off(生产环境设置为off,开发环境就设置为On,便于调试)
说明:设置了dispaly_errors为off后,需要在php-fpm.conf中开启错误日志记录路径 error_log = log/php-fpm.log
cd php
cp etc/php-fpm.conf. default etc/php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf. default www.conf
cd /usr/local/php
sbin/php-fpm
ps -e | grep php-fpm
如果在编译PHP时指定了--with-mysql=mysqlnd和--with-pdo-mysql=mysqlnd的参数,那么在生产中可能会遇到socket连接问题,解决办法是在php.ini里加入命令: pdo_mysql.default_socket=/usr/local/mysql/tmp/mysql.sock
最好是在编译PHP的时候,指定mysql.socket的位置:
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock
|
开机自启
1 2 3 | vim /etc/rc.local
# PHP-FPM自动启动
/usr/local/php/sbin/php-fpm &
|
管理PHP-FPM
记录pid
1 2 3 4 5 6 7 8 9 | vi /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log #24行这个在php.ini设置display_errors = Off时启用
设置完之后重启服务器
向进程发送信号,就可以完成进程管理
停止: kill -INT `cat /usr/local/php/ var /run/php-fpm.pid`
平滑停止: kill -QUIT `cat /usr/local/php/ var /run/php-fpm.pid`
重启:kill -USR2 `cat /usr/local/php/ var /run/php-fpm.pid`
重新打开日志:kill -USR1 `cat /usr/local/php/ var /run/php-fpm.pid`
|
配置Nginx和PHP关联
nginx.conf配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #user nobody;
worker_processes 1;
# error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#隐藏Nginx软件版本号
server_tokens off;
#激活tcp_nodelay功能,提高I/O性能
tcp_nodelay on;
# 设置读取客户端请求头数据的超时时间。此处的数值为15,其单位是秒,为经验参考值
client_header_timeout 15;
# 设置读取客户端请求体的超时时间
client_body_timeout 15;
# 指定响应客户端的超时时间
send_timeout 25;
# 上传文件大小限制
client_max_body_size 8m;
#压缩配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
# include extra/gzip.config;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"' ;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
include extra/*.conf;
}
|
在conf目录下新建一个extra目录,专门用于配置虚拟机;
例如,我们想配置一个www.nginx.con的域名,我们可以在extra下新建一个nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | server {
listen 80;
server_name www.nginx.com;
root html/blog/ public ;
#access_log logs/host.access.log main;
location / {
index index.php index.html index.htm;
if (!-e $request_filename ) {
rewrite ^/(.*)$ /index.php/ $1 last;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info ;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}
|
Nginx优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 开启gzip压缩功能
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认是0,表示不管页面多大都进行压缩。建议设置成1K,如果小于1K可能会越压越大。
gzip_min_length 1k;
# 压缩缓冲区大小。表示申请4个单位为32k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存来存储gzip压缩结果
gzip_buffers 4 32k;
# 压缩版本(默认1.1,前端为squid2.5时使用1.0),用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_http_version 1.1;
# 压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快; 9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。
gzip_comp_level 2;
# 指定压缩类型
gzip_types text/css text/xml application/javascript;
# header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据
gzip_vary on;
|
LAMP
安装依赖
1 | sudo yum install gcc gcc-c++ perl perl-devel expat expat-devel autoconf libtool openssl openssl-devel
|
安装apr
1 2 3 4 5 | 下载地址:https:
tar -zxvf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install
|
安装apr-util
1 2 3 4 5 | 下载地址:https:
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
|
安装pcre
1 2 3 4 5 | 下载地址:ftp:
tar zxvf pcre-8.42.tar.gz
cd pcre-8.42
./configure --prefix=/usr/local/pcre
make && make install
|
安装Apache
1 2 3 4 5 6 7 8 9 10 | tar zxvf httpd-2.4.33.tar.gz
cd httpd-2.4.33
./configure \
--prefix=/usr/local/apache \
--enable-ssl \
--enable-so \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre=/usr/local/pcre
make && make install
|
配置环境变量
1 2 3 | vi /etc/profile
export PATH= "$PATH:/usr/local/apache/bin"
source /etc/profile
|
开机自启
1 2 | vim /etc/rc.d/rc.local
/usr/local/apache/bin/apachectl start
|
配置
1 2 3 4 5 6 7 8 9 10 11 | cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/extra/httpd-vhosts.conf /usr/local/apache/conf/extra/httpd-vhosts.conf.bak
vi /usr/local/apache/conf/httpd.conf
去掉152行前面的#号,开启重写模块
去掉194行前面的#号,去除错误信息
239行允许重写 AllowOverride All
开启Apache:
apachectl -k start
|
关闭防火墙
1 2 3 4 5 6 7 8 | CentOS6:
service iptables stop 临时关闭
chkconfig --level 2345 iptables off 永久关闭
CentOS7:
systemctl stop firewalld.service #令关闭防火墙
systemctl disable firewalld.service #关闭防火墙开机自启动
通过浏览器输入IP测试成功
|
安装MySQL
安装依赖
(1)cmake是新版MySQL的编译工具
1 2 3 | sudo yum install gcc gcc-c++ cmake ncurses-devel
如下的几个依赖在CentOS7中需要安装,CentOS6不需要
sudo yum install perl perl-devel autoconf
|
编译安装MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | useradd -s /sbin/nologin -M mysql # 添加MySQL用户
cd mysql-5.6.40
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.40 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.40/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.40/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306
make
make install
|
配置
1 2 3 4 5 6 7 | cd /usr/local/mysql-5.6.40
chown mysql.mysql /usr/local/mysql-5.6.40/data
mkdir tmp
chown mysql.mysql /usr/local/mysql-5.6.40/tmp
rm -f /etc/my.cnf
cp support-files/my- default .cnf /etc/my.cnf
scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
|
加入守护进程
1 2 3 4 5 | cd /usr/local
ln -s mysql-5.6.40 mysql
cd
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
|
配置环境变量
1 2 3 | vi /etc/profile
export PATH= "/usr/local/mysql/bin"
source /etc/profile
|
启动MySQL
1 2 3 | service mysqld start
mysql -u root -p #第一次登陆不需要密码,回车即可
set password for root@localhost = password( 'root' ); #修改密码
|
安装PHP
编译安装PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | tar zxvf php-7.2.3.tar.gz
cd php-7.2.3
./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-zlib \
--with-gd \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-zip \
--enable-sockets \
--with-curl
make && make install
|
配置Apache与PHP关联
1 2 3 4 5 6 | vi /usr/local/apache/conf/httpd.conf
# 加入 在 加载了PHP模块之后
<FilesMatch "\.php$" >
SetHandler application/x-httpd-php
</FilesMatch>
# 保存,退出,重启
|
配置环境变量
1 2 3 4 5 6 7 8 | vi /etc/profile
export PATH= "$PATH:/usr/local/php/bin"
source /etc/profile
cp /root/package/php-7.2.3/php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini
date .timezone = PRC (大约在932行)
|
配置虚拟主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | vi /usr/local/apache/conf/httpd.conf
258行,默认首页加入index.php
483行,开启虚拟主机支持
vi /usr/local/apache/conf/extra/httpd-vhosts.conf
vi /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin www.huiwan.com
DocumentRoot "/mnt/hgfs/web/huiwan"
ServerName www.huiwan.com
#ErrorLog "logs/dummy-host2.example.com-error_log"
#CustomLog "logs/dummy-host2.example.com-access_log" common
<Directory "/mnt/hgfs/web/huiwan" >
Options indexes Multiviews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
|
PHP环境如何搭建?本篇文章给大家带来的内容是PHP环境如何搭建?PHP环境搭建(详解)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。
按照文章的步骤操作,可以帮助你在CentOS6.*系统上搭建一个LNMP环境或者LAMP环境。这些环境可以作为服务器的线上运行环境。
LNMP
准备工作
安装wget
wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议下载,并可以可以使用HTTP代理。
安装net-tools
最小化安装CentOS7时如果无法使用ifconfig命令,则需要安装net-tools(如果是安装的CentOS6版本则无需安装)
1 | sudo yum install net-tools
|
更新yum源
安装vim
配置显示行号
1 2 | vim ~/.vimrc
输入: set nu 后退出保存
|
安装Nginx
安装依赖
(1) 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装gcc-c++。
(2) PCRE是一个Perl库,中文"Perl兼容的正则表达式库"。安装Nginx是为了使Nginx支持具备URI重写功能的rewrite模块,如果不安装pcre库,则Nginx无法使用rewrite模块功能,Nginx的Rewrite模块功能几乎是企业应用必须。
(3) zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
(4) OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要安装 OpenSSL 库 。
1 2 | yum -y install gcc gcc-c++ zlib zlib-devel
yum -y install pcre pcre-devel openssl openssl-devel
|
说明:yum安装方式安装的pcre版本比较低,不过基本不影响使用
检查基础依赖包
1 2 3 4 | rpm -qa pcre pcre-devel
rpm -qa zlib zlib-devel
rpm -qa openssl openssl-devel
rpm -qa pcre pcre-devel
|
编译安装Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | cd ~
这里我们默认把安装包都放在了/usr/src目录下
cd /usr/src #切换到软件包目录
wget https:
useradd nginx -s /sbin/nologin -M #创建nginx用户用于管理nginx程序
tar zxvf nginx-1.14.0.tar.gz #解压nginx源码包
cd nginx-1.14.0
#预编译
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx-1.14.0 \
--with-http_stub_status_module \
--with-http_ssl_module
make #编译
make install #安装
cd /usr/local
ln -s nginx-1.14.0 nginx #创建nginx的软链接
|
配置环境变量
1 2 3 | vim /etc/profile
export PATH= "/usr/local/nginx/sbin:$PATH"
source /etc/profile
|
开机自启
1 2 3 | vim /etc/rc.local
# Nginx开机自启
/usr/local/nginx/sbin/nginx &
|
安装说明
编译Nginx软件时,可以使用configure--help查看相关帮助。下面是本次编译时指定的参数及简单说明:
1 2 3 4 5 | --prefix=PATH #设置安装路劲
--user=USER #进程用户权限
--group=GROUP #进程用户组权限
--with-http_stub_status_module #激活状态信息
--with-http_ssl_module #激活ssl功能
|
语法检查
安装完Nginx后,并不能直接对外提供服务,需要先启动Nginx服务才行,具体操作如下。
1 | /usr/local/nginx/sbin/nginx -t
|
Nginx命令
1 2 3 4 5 | /usr/local/nginx/sbin/nginx #启动
/usr/local/nginx/sbin/nginx -s stop #立即停止
/usr/local/nginx/sbin/nginx -s quit #平滑停止
/usr/local/nginx/sbin/nginx -s reload #重载配置
/usr/local/nginx/sbin/nginx -s reopen #重开日志
|
服务启动检查
1 2 | sudo yum install lsof
lsof -i :80
|
关闭防火墙
1 2 3 4 5 6 7 8 | CentOS6:
service iptables stop 临时关闭
chkconfig --level 2345 iptables off 永久关闭
CentOS7:
systemctl stop firewalld.service #令关闭防火墙
systemctl disable firewalld.service #关闭防火墙开机自启动
通过浏览器输入IP测试是否成功
|
安装MySQL
安装依赖
(1)cmake是新版MySQL的编译工具
1 2 3 | sudo yum install gcc gcc-c++ cmake ncurses-devel
如下的几个依赖在CentOS7中需要安装,CentOS6不需要
sudo yum install perl perl-devel autoconf
|
编译安装MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | useradd -s /sbin/nologin -M mysql # 添加MySQL用户
wget https:
tar zxvf mysql-5.6.41.tar.gz
cd mysql-5.6.41
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.41 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.41/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.41/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306
make && make install
|
配置
1 2 3 4 5 6 7 | cd /usr/local/mysql-5.6.41
chown mysql.mysql /usr/local/mysql-5.6.41/data
mkdir tmp
chown mysql.mysql /usr/local/mysql-5.6.41/tmp
rm -f /etc/my.cnf
cp support-files/my- default .cnf /etc/my.cnf
scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
|
加入守护进程
1 2 3 4 5 | cd /usr/local
ln -s mysql-5.6.41 mysql
cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
|
配置环境变量
1 2 3 | vim /etc/profile
export PATH= "/usr/local/mysql/bin"
source /etc/profile
|
启动MySQL
1 2 3 | service mysqld start
mysql -u root -p #第一次登陆不需要密码,回车即可
set password for root@localhost = password( 'root' ); #修改密码
|
安装PHP
安装依赖
1 | sudo yum install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel
|
编译安装PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | cd ~/package
wget http:
tar zxvf php-7.2.10.tar.gz
cd php-7.2.10
./configure \
--prefix=/usr/local/php-7.2.10 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-zlib \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-gd \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-openssl \
--with-curl \
--enable-mbstring \
--enable- static \
--enable-zip \
--enable-sockets \
--enable-xml
make && make install
|
编译参数详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ./configure \
--prefix=/usr/local/php-7.2.7 \ # 指定安装路径
--enable-fpm \ # 表示激活PHP-FPM方式服务,即FactCGI方式运行PHP服务。
--with-fpm-user=nginx \ # 指定PHP-FPM进程管理的用户为www,此处最好和Nginx服务用户统一。
--with-fpm-group=nginx \ # 指定PHP-FPM进程管理用户组为www,此处最好和Nginx服务用户组统一。
--with-zlib \ # 打开zlib库的支持,用于http压缩传输
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-gd \ # 打开gd库的支持
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-openssl \ # 打开openssl,加密传输时用到
--with-curl \ # 打开curl浏览工具的支持
--enable-mbstring \ # 多字节,字符串的支持
--enable- static \ # 生成静态链接库
--enable-zip \ # 打开对zip的支持
--enable-sockets \ # 打开 sockets 支持
--enable-xml
|
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | cd /usr/local
ln -s php-7.2.10 php
cp /usr/src/php-7.2.10/php.ini-development /usr/local/php-7.2.10/lib/php.ini
vim /usr/local/php/lib/php.ini
date .timezone = PRC (大约在932行)
expose_php = Off #避免PHP信息暴露在http头中(大约369行)
display_errors = Off(生产环境设置为off,开发环境就设置为On,便于调试)
说明:设置了dispaly_errors为off后,需要在php-fpm.conf中开启错误日志记录路径 error_log = log/php-fpm.log
cd php
cp etc/php-fpm.conf. default etc/php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf. default www.conf
cd /usr/local/php
sbin/php-fpm
ps -e | grep php-fpm
如果在编译PHP时指定了--with-mysql=mysqlnd和--with-pdo-mysql=mysqlnd的参数,那么在生产中可能会遇到socket连接问题,解决办法是在php.ini里加入命令: pdo_mysql.default_socket=/usr/local/mysql/tmp/mysql.sock
最好是在编译PHP的时候,指定mysql.socket的位置:
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock
|
开机自启
1 2 3 | vim /etc/rc.local
# PHP-FPM自动启动
/usr/local/php/sbin/php-fpm &
|
管理PHP-FPM
记录pid
1 2 3 4 5 6 7 8 9 | vi /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log #24行这个在php.ini设置display_errors = Off时启用
设置完之后重启服务器
向进程发送信号,就可以完成进程管理
停止: kill -INT `cat /usr/local/php/ var /run/php-fpm.pid`
平滑停止: kill -QUIT `cat /usr/local/php/ var /run/php-fpm.pid`
重启:kill -USR2 `cat /usr/local/php/ var /run/php-fpm.pid`
重新打开日志:kill -USR1 `cat /usr/local/php/ var /run/php-fpm.pid`
|
配置Nginx和PHP关联
nginx.conf配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #user nobody;
worker_processes 1;
# error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#隐藏Nginx软件版本号
server_tokens off;
#激活tcp_nodelay功能,提高I/O性能
tcp_nodelay on;
# 设置读取客户端请求头数据的超时时间。此处的数值为15,其单位是秒,为经验参考值
client_header_timeout 15;
# 设置读取客户端请求体的超时时间
client_body_timeout 15;
# 指定响应客户端的超时时间
send_timeout 25;
# 上传文件大小限制
client_max_body_size 8m;
#压缩配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
# include extra/gzip.config;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"' ;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
include extra/*.conf;
}
|
在conf目录下新建一个extra目录,专门用于配置虚拟机;
例如,我们想配置一个www.nginx.con的域名,我们可以在extra下新建一个nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | server {
listen 80;
server_name www.nginx.com;
root html/blog/ public ;
#access_log logs/host.access.log main;
location / {
index index.php index.html index.htm;
if (!-e $request_filename ) {
rewrite ^/(.*)$ /index.php/ $1 last;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info ;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}
|
Nginx优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 开启gzip压缩功能
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认是0,表示不管页面多大都进行压缩。建议设置成1K,如果小于1K可能会越压越大。
gzip_min_length 1k;
# 压缩缓冲区大小。表示申请4个单位为32k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存来存储gzip压缩结果
gzip_buffers 4 32k;
# 压缩版本(默认1.1,前端为squid2.5时使用1.0),用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_http_version 1.1;
# 压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快; 9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。
gzip_comp_level 2;
# 指定压缩类型
gzip_types text/css text/xml application/javascript;
# header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据
gzip_vary on;
|
LAMP
安装依赖
1 | sudo yum install gcc gcc-c++ perl perl-devel expat expat-devel autoconf libtool openssl openssl-devel
|
安装apr
1 2 3 4 5 | 下载地址:https:
tar -zxvf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install
|
安装apr-util
1 2 3 4 5 | 下载地址:https:
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
|
安装pcre
1 2 3 4 5 | 下载地址:ftp:
tar zxvf pcre-8.42.tar.gz
cd pcre-8.42
./configure --prefix=/usr/local/pcre
make && make install
|
安装Apache
1 2 3 4 5 6 7 8 9 10 | tar zxvf httpd-2.4.33.tar.gz
cd httpd-2.4.33
./configure \
--prefix=/usr/local/apache \
--enable-ssl \
--enable-so \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre=/usr/local/pcre
make && make install
|
配置环境变量
1 2 3 | vi /etc/profile
export PATH= "$PATH:/usr/local/apache/bin"
source /etc/profile
|
开机自启
1 2 | vim /etc/rc.d/rc.local
/usr/local/apache/bin/apachectl start
|
配置
1 2 3 4 5 6 7 8 9 10 11 | cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/extra/httpd-vhosts.conf /usr/local/apache/conf/extra/httpd-vhosts.conf.bak
vi /usr/local/apache/conf/httpd.conf
去掉152行前面的#号,开启重写模块
去掉194行前面的#号,去除错误信息
239行允许重写 AllowOverride All
开启Apache:
apachectl -k start
|
关闭防火墙
1 2 3 4 5 6 7 8 | CentOS6:
service iptables stop 临时关闭
chkconfig --level 2345 iptables off 永久关闭
CentOS7:
systemctl stop firewalld.service #令关闭防火墙
systemctl disable firewalld.service #关闭防火墙开机自启动
通过浏览器输入IP测试成功
|
安装MySQL
安装依赖
(1)cmake是新版MySQL的编译工具
1 2 3 | sudo yum install gcc gcc-c++ cmake ncurses-devel
如下的几个依赖在CentOS7中需要安装,CentOS6不需要
sudo yum install perl perl-devel autoconf
|
编译安装MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | useradd -s /sbin/nologin -M mysql # 添加MySQL用户
cd mysql-5.6.40
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.40 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.40/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.40/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306
make
make install
|
配置
1 2 3 4 5 6 7 | cd /usr/local/mysql-5.6.40
chown mysql.mysql /usr/local/mysql-5.6.40/data
mkdir tmp
chown mysql.mysql /usr/local/mysql-5.6.40/tmp
rm -f /etc/my.cnf
cp support-files/my- default .cnf /etc/my.cnf
scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
|
加入守护进程
1 2 3 4 5 | cd /usr/local
ln -s mysql-5.6.40 mysql
cd
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
|
配置环境变量
1 2 3 | vi /etc/profile
export PATH= "/usr/local/mysql/bin"
source /etc/profile
|
启动MySQL
1 2 3 | service mysqld start
mysql -u root -p #第一次登陆不需要密码,回车即可
set password for root@localhost = password( 'root' ); #修改密码
|
安装PHP
编译安装PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | tar zxvf php-7.2.3.tar.gz
cd php-7.2.3
./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-zlib \
--with-gd \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-zip \
--enable-sockets \
--with-curl
make && make install
|
配置Apache与PHP关联
1 2 3 4 5 6 | vi /usr/local/apache/conf/httpd.conf
# 加入 在 加载了PHP模块之后
<FilesMatch "\.php$" >
SetHandler application/x-httpd-php
</FilesMatch>
# 保存,退出,重启
|
配置环境变量
1 2 3 4 5 6 7 8 | vi /etc/profile
export PATH= "$PATH:/usr/local/php/bin"
source /etc/profile
cp /root/package/php-7.2.3/php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini
date .timezone = PRC (大约在932行)
|
配置虚拟主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | vi /usr/local/apache/conf/httpd.conf
258行,默认首页加入index.php
483行,开启虚拟主机支持
vi /usr/local/apache/conf/extra/httpd-vhosts.conf
vi /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin www.huiwan.com
DocumentRoot "/mnt/hgfs/web/huiwan"
ServerName www.huiwan.com
#ErrorLog "logs/dummy-host2.example.com-error_log"
#CustomLog "logs/dummy-host2.example.com-access_log" common
<Directory "/mnt/hgfs/web/huiwan" >
Options indexes Multiviews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
|