阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS下搭建LAMP环境详解

153次阅读
没有评论

共计 10393 个字符,预计需要花费 26 分钟才能阅读完成。

前言:在这里将介绍如何在 CentOS 下搭建 LAMP 环境(全部使用源码编译安装),用于 web 服务器开发。

  • LAMP: Linux + Apache + PHP + MySQL。
  • 系统: CentOS 7,64 位。

CentOS 安装

我选取了 64 位的 CentOS 7 这个 Linux 系统,安装过程也很简单,不再过多叙述,只稍微介绍一下我的分区情况:

分区名 大小
/boot 200MB
/swap 8GB(不大于物理分区即可)
/ 20GB
/home 剩余空间

Apache 编译安装

我选择了 httpd 2.2 这个版本,可以参考官方说明文档。

安装依赖:

安装依赖需要用到的 gcc、g++ 编译器:

########gcc、g++

sudo yum install gcc 
sudo yum install gcc-c++

下面两个是 apache 的优化工具:

########apr

wget http://labfile.oss.aliyuncs.com/apr-1.5.1.tar.gz
tar -zxvf apr-1.5.1.tar.gz
cd apr-1.5.1/
./configure --prefix=/opt/apr
sudo make && make install
########apr-util

cd Downloads/
wget http://labfile.oss.aliyuncs.com/apr-util-1.5.4.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/opt/apr-util --with-apr=/opt/apr
sudo make && make install

Perl 库,兼容正则表达式库:

cd Downloads/
wget  http://labfile.oss.aliyuncs.com/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure --prefix=/opt/pcre
sudo make && make install

安装 apache:

cd Downloads/
wget http://labfile.oss.aliyuncs.com/httpd-2.2.29.tar.gz
tar -zxvf httpd-2.2.29.tar.gz
cd httpd-2.2.29
./configure --prefix=/opt/apache --with-apr=/opt/apr --with-apr-util=/opt/apr-util --with-pcre=/opt/pcre
sudo make && make install
sudo sed -i 's/^#ServerName.*/ServerName localhost/' /opt/apache/conf/httpd.conf

测试:

启动:

sudo /opt/apache/bin/apachectl start

获取服务器回应(安装 apache 最后一步已经将服务器设为 localhost):

curl -I 127.0.0.1

若安装成功则如下:
CentOS 下搭建 LAMP 环境详解

关闭:

sudo /opt/apache/bin/apachectl stop

MySQL 编译安装

安装依赖:

注意: MySQL5.5 之后的版本使用 cmake 进行编译。

######## 若先前编译过,则需要删除刚才编译生成的 CMakeCache.txt 文件

rm -f CMakeCache.txt

sudo yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake cmake-gui libaio-devel bison-devel make

编译安装(时间较长):

cd Downloads/
wget http://labfile.oss.aliyuncs.com/mysql-5.6.24.tar.gz
tar -zxvf mysql-5.6.24.tar.gz
cd mysql-5.6.24
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_DATADIR=/opt/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1
sudo make 
sudo make install

创建 mysql 用户:

id mysql > /dev/null 2>&1 || sudo useradd -r -s /sbin/nologin -M -d /opt/mysql/data mysql

初始化数据目录:

sudo chown -R mysql:mysql /opt/mysql/data
sudo /opt/mysql/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql --defaults-file=/opt/mysql/support-files/my-default.cnf

修改配置文件:

sudo sh -c 'cat >> /opt/mysql/my.cnf <<EOF
basedir = /opt/mysql
datadir = /opt/mysql/data
log-error = /opt/mysql/data/error.log
pid-file = /opt/mysql/data/mysql.pid
port = 3306
EOF'

清除残留文件:

sudo sh -c 'for file in /etc/mysql/my.cnf /etc/my.cnf ; do [-f $file ] && rm -f $file ; done'

启动:

sudo /opt/mysql/support-files/mysql.server start

成功则显示:
CentOS 下搭建 LAMP 环境详解

测试:

/opt/mysql/bin/mysqladmin ping

成功则显示:
CentOS 下搭建 LAMP 环境详解

查看数据库:

/opt/mysql/bin/mysql -u root -e 'show databases;'

关闭:

sudo /opt/mysql/support-files/mysql.server stop

成功则显示:
CentOS 下搭建 LAMP 环境详解

PHP 编译安装

安装依赖:

最后三个文件可以从下面的链接下载。

—————————————— 分割线 ——————————————

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2015 年资料 / 9 月 / 3 日 /Linux 中文 man 离线手册 CHM/

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

—————————————— 分割线 ——————————————

cd Downloads/
sudo yum install zlib1g-dev libbz2-dev libcurl4-gnutls-dev  libjpeg-dev libpng12-dev  libfreetype6-dev  libmcrypt-dev libxml2-dev
sudo yum install bzip2-devel.x86_64 -y
sudo yum -y install curl-devel
sudo yum install openssl.x86_64 openssl-devel.x86_64 -y
sudo yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
sudo yum install libjpeg libjpeg-devel libpng libpng-devel

######## 安装 Libmcrypt
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
sudo make
sudo make install 说明:libmcript 默认安装在 /usr/local 

######## 安装 mhash
cd ..
tar -zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
sudo make
sudo make install

######### 安装 mcrypt
cd ..
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
LD_LIBRARY_PATH=/usr/local/lib ./configure
sudo make
sudo make install

编译安装:

cd Downloads/
wget http://labfile.oss.aliyuncs.com/php-5.5.21.tar.gz
tar -zxvf php-5.5.21.tar.gz
cd php-5.5.21
./configure --prefix=/opt/php --with-bz2 --with-curl --with-jpeg-dir --with-gd --enable-shared --enable-mbstring --with-mcrypt --with-mysql=/opt/mysql --with-pdo-mysql=/opt/mysql --with-mysqli=/opt/mysql/bin/mysql_config --enable-fpm --enable-phar --enable-bcmath --with-zlib --enable-zip --enable-ftp --with-gettext --enable-sockets --with-freetype-dir  --with-config-file-path=/opt/php/etc/php.ini --with-config-file-scan-dir=/opt/php/etc/conf.d --with-apxs2=/opt/apache/bin/apxs
sudo make
sudo make install
sudo cp php.ini-production /opt/php/etc/php.ini

检查 php 是否支持 mysql:

/opt/php/bin/php -m | grep mysql

若支持则显示:
CentOS 下搭建 LAMP 环境详解

修改 apache 配置文件,添加 php 的支持配置:

sudo sh -c 'cat >> /opt/apache/conf/httpd.conf <<EOF
<IfModule mime_module>
AddType application/x-httpd-php .php
</IfModule>
EOF'

若关闭则开启 apache,否则重新启动 apache:

sudo /opt/apache/bin/apachectl -k restart

测试:

sudo sh -c 'echo"<?php echo phpinfo(); ?>"> /opt/apache/htdocs/test.php'

在浏览器输入:

http://localhost/test.php

配置成功则显示 php 信息:
CentOS 下搭建 LAMP 环境详解

添加第三方模块

使用 apxs 手动编译 Apache 模块:

关于 apxs 的一些介绍及参数详见这里。
这里以 metadata 模块为例:

cd ~/Downloads/httpd-2.2.29/modules/metadata
sudo /opt/apache/bin/apxs -i -a -c mod_headers.c
###########################################################
-c:此选项表示需要执行编译操作。它首先会编译 C 源程序(.c)files 为对应的目标代码文件(.o),然后,连接这些目标代码和 files 中其余的目标代码文件(.o and .a),以生成动态共享对象 dsofile。如果没有指定 - o 选项,则此输出文件名由 files 中的第一个文件名推测得到,所以,缺省时,它一般会是 mod_name.so
-i:此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的 modules 目录中。-a:此选项自动在 httpd.conf 文件中增加一个 LoadModule 行,以激活此模 ## 标题 ## 块,或者,如果此行已经存在,则启用之。###########################################################

使用 phpize 手动编译 PHP 模块:

cd ~/Downloads/php-5.5.21/ext/ftp
/opt/php/bin/phpize
./configure --with-php-config=/opt/php/bin/php-config
sudo make
sudo make install

在 php.ini 中加载模块:

sudo sh -c 'echo"extension=ftp.so">> /opt/php/etc/php.ini'

LAMP 配置

php 配置:

配置文件 /opt/php/etc/php.ini:

### 常规配置
    engine = On
    short_open_tag = Off  #tags 识别
    asp_tags = Off #asp tags 识别
    precision = 14  # 浮点类型数显示时的有效位数
    output_buffering = 4096   # 输出缓存允许你在输出正文内容之后发送 header
    implicit_flush = Off   # 告诉输出层在每个输出块之后自动刷新自身数据
    disable_functions =    # 关闭特定函数
    display_errors = Off   # 显示错误信息
    log_errors = On        # 在日志文件里记录错误
    request_order = "GP"   #GET POST
    register_argc_argv = On # 是否声明 argv 和 argc 变量
    post_max_size = 8M     # 最大 POST 大小
    file_uploads = On      # 是否允许 HTTP 方式文件上载 
    upload_tmp_dir =       # 用于 HTTP 上载的文件的临时目录
    upload_max_filesize = 2M   # 上载文件的最大大小
    max_file_uploads = 20      # 每次最大上传文件个数
    allow_url_fopen = On   # 是否允许把 URLs 当作 http:.. 或把文件当作 ftp:...
    default_socket_timeout = 60  # 默认 socker 超时时间

    #MySQL 相关
    mysql.allow_persistent = On # 允许持久连接
    mysql.cache_size = 2000  # 缓存大小
    mysql.max_persistent = -1  # 持久连接的最大数目 - 1 不限制
    mysql.max_links = -1  # 最大链接 
    mysql.connect_timeout = 60  # 连接超时时间

    #session 相关
    session.save_handler = files # 用于保存 / 取回数据的控制方式
    session.use_cookies = 1 # 是否使用 cookies
    session.name = PHPSESSID  # 设置 cookies 名
    session.use_only_cookies = 1  # 强制 SESSION ID 必须以 COOKIE 传递
    session.auto_start = 0  # 在请求启动时初始化 session 
    session.cookie_lifetime = 0  #cookies 保持时间

    #session 垃圾回收参数
    session.gc_probability = 1 # 按百分比整理
    session.gc_divisor = 1000  # 每次请求时有 1 /1000 的机会启动 "垃圾回收" 进程

    #Session ID 传递参数
    session.use_trans_sid = 0 # 使用 URL 的方式传递 session id
    session.hash_function = 0 # 生成 SID MD5 算法
    session.hash_bits_per_character = 5  # 指定在 SID 字符串中的每个字符内保存多少 bit

    # 常用配置参数
    max_execution_time 30   # 一个脚本可使用多少 CPU 秒
    max_input_time 60       # 一个脚本等待输入数据的时间有多长(秒)
    memory_limit  32M       # 在被取消之前,一个脚本可使用多少内存(字节)
    output_buffering  4096  # 数据发送给客户机之前,有多少数据(字节)需要缓存

apache 配置:

apache 主配置文件 /opt/apache/conf/httpd.conf:

#apache 服务根目录
ServerRoot "/opt/apache"
# 服务管理员
ServerAdmin you@example.com
# 监听端口
Listen 80
# 默认首页
DirectoryIndex index.php
# 加载 php 模块
LoadModule php5_module        modules/libphp5.so
# 解析 php
AddType application/x-httpd-php .php

# 目录权限参数
DocumentRoot "/opt/apache/htdocs" #WEB 文件根目录 <Directory "/opt/apache/htdocs"> # 官方文档链接 http://httpd.apache.org/docs/2.2/mod/core.html Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all #允许所有请求 </Directory>

AllowOverride 参数详解:

  1. none 不允许.htaccess 使用任何指令。
  2. AuthConfig 允许使用所有的权限指令,包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require。
  3. FileInfo 允许使用文件控制类型的指令。包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority。
  4. Indexes 允许使用目录控制类型的指令。包括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName。
  5. Limit 允许使用权限控制指令。包括 Allow Deny 和 Order。
  6. Options 允许使用控制目录特征的指令,包括 Options 和 XBitHack。

Options 参数详解:

  1. All 表示除 MultiViews 之外的所有特性。这也是 Options 指令的默认设置。
  2. None 表示不启用任何的服务器特性。
  3. FollowSymLinks 服务器允许在此目录中使用符号连接。如果该配置选项位于配置段中,将会被忽略。
  4. Indexes 如果输入的网址对应服务器上的一个文件目录,而此目录中又没有 DirectoryIndex 指令
  5. MultiViews 允许使用 mod_negotiation 模块提供内容协商的”多重视图”。如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。
  6. SymLinksIfOwnerMatch 服务器仅在符号连接与目标文件或目录的所有者具有相同的用户 ID 时才使用它。只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。
  7. ExecCGI 允许使用 mod_cgi 模块执行 CGI 脚本。
  8. Includes 允许使用 mod_include 模块提供的服务器端包含功能
  9. IncludesNOEXEC 允许服务器端包含,但禁用”#exec cmd”和”#exec cgi”。但仍可以从 ScriptAlias 目录使用”#include virtual”虚拟 CGI 脚本。
# 日志配置参数
ErrorLog "logs/error_log"
LogLevel warn  # 错误日志记录等级

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\"%>s %b" common  # 自定义日志 名为 common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"%I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" common   #日志路径  使用名为 common 的自定义格式
</IfModule>

LogLevel 记录日志等级:

  1. error 错误情况。
  2. warn 警告情况。
  3. info 普通信息。
  4. debug 出错级别信息。

日志格式:
1. %h – 客户端的 ip 地址或主机名。
2. %l – The 这是由客户端 identd 判断的 RFC 1413 身份,输出中的符号“-”表示此处信息无效。
3. %u – 由 HTTP 认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号“-”表示此处信息无效。
4. %t – 服务器完成对请求的处理时的时间。
5.“%r”– 引号中是客户发出的包含了许多有用信息的请求内容。
6. %>s – 这个是服务器返回给客户端的状态码。
7. %b – 最后这项是返回给客户端的不包括响应头的字节数。
8.“%{Referer}i”– 此项指明了该请求是从被哪个网页提交过来的。
9.“%{User-Agent}i”– 此项是客户浏览器提供的浏览器识别信息。

# 实际访问日志
192.168.1.166 - - [04/Feb/2015:12:52:35 +0800] "GET / HTTP/1.1" 200 25

# 基于域名的虚拟主机
<VirtualHost *:80> DocumentRoot /web1 ServerName web1.com ErrorLog /app/apache/logs/error_log CustomLog /app/apache/logs/access_log combined </VirtualHost> <VirtualHost *:80> DocumentRoot /web2 ServerName web2.com </VirtualHost> # 基于 IP 的虚拟主机 <VirtualHost 210.20.30.40> DocumentRoot /web1 ServerName web1.com </VirtualHost> <VirtualHost 210.20.30.50> DocumentRoot web2 ServerName web2.com </VirtualHost> # 基于端口的虚拟主机 Listen 172.20.30.40:80 Listen 172.20.30.40:8080 <VirtualHost 172.20.30.40:80> DocumentRoot /web1 ServerName web1.com </VirtualHost> <VirtualHost 172.20.30.40:8080> DocumentRoot /web2 ServerName web2.com </VirtualHost>

#perfork 工作模式参数
StartServers 50 # 预创建 50 个进程 MinSpareServers 15 # 保持最小空闲进程 MaxSpareServers 30 # 保持最大空闲进程 MaxClients 225 # 最大进程数 MaxRequestsPerChild 4000 # 用来控制每个进程在处理了多少次请求之后自动销毁

注意:设置 perfork 工作模式参数时,需要使用 ps aux 查看进程占用内存数,以此调整实际环境中的参数,防止此消耗所有的资源。

下面关于 LAMP 相关 的内容你可能也喜欢

LAMP 平台安装 Xcache 和 Memcached 加速网站运行  http://www.linuxidc.com/Linux/2015-06/118835.htm 

CentOS 7 下搭建 LAMP 平台环境  http://www.linuxidc.com/Linux/2015-06/118818.htm

CentOS 6.5 系统安装配置 LAMP(Apache+PHP5+MySQL)服务器环境 http://www.linuxidc.com/Linux/2014-12/111030.htm

Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9)开发环境  http://www.linuxidc.com/Linux/2014-10/107924.htm

Ubuntu 14.10 下安装 LAMP 服务图文详解  http://www.linuxidc.com/Linux/2014-12/110082.htm

LAMP 结合 NFS 构建小型博客站点  http://www.linuxidc.com/Linux/2015-08/121029.htm 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123465.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10393字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中