准备篇:php
1、配置防火墙,开启80端口、3306端口html
CentOS 7 默认使用的是firewall做为防火墙,这里改成iptables防火墙。mysql
一、关闭firewall:linux
systemctl stop firewalld.service #中止firewall systemctl disable firewalld.service #禁止firewall开机启动
二、安装iptables防火墙web
yum install iptables-services #安装 vi /etc/sysconfig/iptables #编辑防火墙配置文件
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT :wq! #保存退出
systemctl restart iptables.service #最后重启防火墙使配置生效 systemctl enable iptables.service #设置防火墙开机启动
2、关闭SELINUXsql
vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增长 :wq! #保存退出 setenforce 0 #使配置当即生效
安装篇:shell
1、安装Apache数据库
yum install httpd #根据提示,输入Y安装便可成功安装 systemctl start httpd.service #启动apache systemctl stop httpd.service #中止apache systemctl restart httpd.service #重启apache systemctl enable httpd.service #设置apache开机启动
2、安装MariaDBapache
CentOS 7 中,已经使用MariaDB替代了MySQL数据库浏览器
一、安装MariaDB
yum install mariadb mariadb-server #询问是否要安装,输入Y便可自动安装,直到安装完成 systemctl start mariadb.service #启动MariaDB systemctl stop mariadb.service #中止MariaDB systemctl restart mariadb.service #重启MariaDB systemctl enable mariadb.service #设置开机启动 cp /usr/share/mysql/my-huge.cnf /etc/my.cnf #拷贝配置文件(注意:若是/etc目录下面默认有一个my.cnf,直接覆盖便可)
二、为root帐户设置密码
mysql_secure_installation
回车,根据提示输入Y
输入2次密码,回车
根据提示一路输入Y
最后出现:Thanks for using MySQL!
MySql密码设置完成,从新启动 MySQL:
systemctl restart mariadb.service #重启MariaDB
3、安装PHP
一、安装PHP 和 php-devel工具 方便往后使用 phpize 作扩展编译
yum install php php-devel #根据提示输入Y直到安装完成
二、安装PHP组件,使PHP支持 MariaDB
yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash
#这里选择以上安装包进行安装,根据提示输入Y回车
systemctl restart mariadb.service #重启MariaDB systemctl restart httpd.service #重启apache
配置篇
1、Apache配置
vi /etc/httpd/conf/httpd.conf #编辑文件 #添加,在错误页中显示Apache的版本,Off为不显示 ServerSignature On #修改成:Options Includes ExecCGI FollowSymLinks(容许服务器执行CGI及SSI,禁止列出目录) Options Indexes FollowSymLinks #修改成:AddHandler cgi-script .cgi .pl (容许扩展名为.pl的CGI脚本运行) AddHandler cgi-script .cgi #修改成:AllowOverride All (容许.htaccess) AllowOverride None #修改成:AddDefaultCharset GB2312 (添加GB2312为默认编码) AddDefaultCharset UTF-8 #修改成 Options FollowSymLinks(不在浏览器上显示树状目录结构) Options Indexes FollowSymLinks #修改成:DirectoryIndex index.html index.htm Default.html Default.htm index.php(设置默认首页文件,增长index.php) DirectoryIndex index.html #添加MaxKeepAliveRequests 500 (增长同时链接数) MaxKeepAliveRequests 500 :wq! #保存退出
systemctl restart httpd.service #重启apache rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #删除默认测试页
2、php配置
vi /etc/php.ini #编辑 date.timezone = PRC #把前面的分号去掉,改成date.timezone = PRC disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname #列出PHP能够禁用的函数,若是某些程序须要用到这个函数,能够删除,取消禁用。 expose_php = Off #禁止显示php版本的信息 short_open_tag = ON #支持php短标签 open_basedir = .:/tmp/ #设置表示容许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,能够防止php木马跨站,若是改了以后安装程序有问题(例如:织梦内容管理系统),能够注销此行,或者直接写上程序的目录/data/www.osyunwei.com/:/tmp/ :wq! #保存退出
systemctl restart mariadb.service #重启MariaDB systemctl restart httpd.service #重启apache
测试篇
cd /var/www/html vi index.php #输入下面内容 <?php phpinfo(); ?> :wq! #保存退出
注意:apache默认的程序目录是/var/www/html
权限设置:chown -R apache:apache /var/www/html
至此,CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)教程完成!
==========================================================================
我的补充
# Virtual Hosts # # Required modules: mod_log_config # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.4/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. Listen 8080 Listen 8081 # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:8080> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/var/www/web_admin" ServerName www.admin.com ServerAlias www.admin.com <Directory "/var/www/web_admin"> Options FollowSymLinks #容许重写 至关于加载 rewrite_mod AllowOverride All Require all granted </Directory> ErrorLog "/var/log/httpd/admin_error_log" CustomLog "/var/log/httpd/admin_access_log" common </VirtualHost> <VirtualHost *:8081> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/var/www/web_home" ServerName www.home.com ServerAlias www.home.com <Directory "/var/www/web_home"> Options FollowSymLinks #容许重写 至关于加载 rewrite_mod AllowOverride All Require all granted </Directory> #若是服务器上存在资源文件夹还能够作这样的限定 <Directory "/var/www/web_home/images"> #去掉 Indexs 能够限制树形罗列全部的 images 而只能根据全路径访问 限制资源目录 Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog "/var/log/httpd/home_error_log" CustomLog "/var/log/httpd/home_access_log" common </VirtualHost>
将文件保存为 /etc/httpd/conf.d/httpd-vhosts.conf 便可
mpm为apache的多线程管理模块,是apache针对高并发的应用场景作的设置优化、
yum 安装的 apache 并不能经过 httpd -l 来查看当前安装的mpm模块是什么
咱们能够 vi /etc/sysconfig/httpd 查看到 mpm 模块的配置文件已经更到 /etc/httpd/conf.modules.d/00-mpm.conf 中,能够经过此配置文件查看加载的mpm模式,默认为 mod_mpm_prefork,同时咱们能够对此模式进行参数设定
<IfModule mpm_prefork_module> StartServers 50 MinSpareServers 20 MaxSpareServers 10 MaxRequestWorkers 300 #以前的版本为 MaxClients ServerLimit 300 MaxConnectionsPerChild 0 </IfModule>
mod_mpm_prefork 的配置,保存为 /etc/httpd/conf.d/httpd-mpm.conf 便可
================================================================
因为在日常的开发工做中,BeOS、NetWare、OS/2等操做系统并不常见,这里咱们主要针对Windows和Unix/Linux操做系统上的MPM模块进行讲解。在Windows和Unix/Linux操做系统上,MPM模块主要有mpm_winnt
、mpm_prefork
、mpm_worker
三种。
mpm_prefork
模块主要应用于Unix/Linux平台的Apache服务器,其主要工做方式是:当Apache服务器启动后,mpm_prefork
模块会预先建立多个子进程(默认为5个),当接收到客户端的请求后,mpm_prefork
模块再将请求转交给子进程处理,而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将超过预先建立的子进程数时,mpm_prefork
模块就会建立新的子进程来处理额外的请求。Apache老是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端的请求就不须要在接收后等候子进程的产生。
因为在mpm_prefork
模块中,每一个请求对应一个子进程,所以其占用的系统资源相对其余两种模块而言较多。不过mpm_prefork
模块的优势在于它的每一个子进程都会独立处理对应的单个请求,这样,若是其中一个请求出现问题就不会影响到其余请求。同时,mpm_prefork
模块能够应用于不具有线程安全的第三方模块(好比PHP的非线程安全版本),且在不支持线程调试的平台上易于调试。此外,mpm_prefork
模块还具备比mpm_worker
模块更高的稳定性。
mpm_worker
模块也主要应用于Unix/Linux平台的Apache服务器,它能够看做是mpm_prefork
模块的改进版。mpm_worker
模块的工做方式与mpm_prefork
模块相似。不过,因为处理相同请求的状况下,基于进程(例如mpm_prefork
)比基于线程的处理方式占用的系统资源要多。所以,与mpm_prefork
模块不一样的是,mpm_worker
模块会让每一个子进程建立固定数量的服务线程和一个监听线程,并让每一个服务线程来处理客户端的请求,监听线程用于监听接入请求并将其传递给服务线程处理和应答。Apache老是试图维持一个备用或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的创建便可获得处理。
与mpm_prefork
模块相比,mpm_worker
模块能够进一步减小系统资源的开销。再加上它也使用了多进程,每一个进程又有多个线程,所以它与彻底基于线程的处理方式相比,又增长了必定的稳定性。
mpm_winnt
模块是专门针对Windows操做系统而优化设计的MPM模块。它只建立一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
此时,咱们就须要根据当前Apache服务器所使用的MPM模块,来修改对应<IfModule>
节点下的参数配置。首先,咱们来看看mpm_winnt
模块下的默认配置:
#因为mpm_winnt模块只会建立1个子进程,所以这里对单个子进程的参数设置就至关于对整个Apache的参数设置。 <IfModule mpm_winnt_module> ThreadsPerChild 150 #推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500 MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=20000~100000 </IfModule>
对应的配置参数做用以下:
ThreadsPerChild
每一个子进程的最大并发线程数。
MaxRequestsPerChild
每一个子进程容许处理的请求总数。若是累计处理的请求数超过该值,该子进程将会结束(而后根据须要肯定是否建立新的子进程),该值设为0表示不限制请求总数(子进程永不结束)。
该参数建议设为非零的值,能够带来如下两个好处:
注意:在以上涉及到统计请求数量的参数中,对于KeepAlive的链接,只有第一个请求会被计数。
接着,咱们再来看看mpm_perfork
模块和mpm_worker
模块下的默认配置:
#mpm_perfork模块 <IfModule mpm_prefork_module> StartServers 5 #推荐设置:小=默认 中=20~50 大=50~100 MinSpareServers 5 #推荐设置:与StartServers保持一致 MaxSpareServers 10 #推荐设置:小=20 中=30~80 大=80~120 MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000 MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~500000 (此外,还需额外设置ServerLimit参数,该参数最好与MaxClients的值保持一致。) </IfModule>
#mpm_worker模块
<IfModule mpm_worker_module> StartServers 2 #推荐设置:小=默认 中=3~5 大=5~10 MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000 MinSpareThreads 25 #推荐设置:小=默认 中=50~100 大=100~200 MaxSpareThreads 75 #推荐设置:小=默认 中=80~160 大=200~400 ThreadsPerChild 25 #推荐设置:小=默认 中=50~100 大型=100~200 MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~50000 (此外,若是MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。) </IfModule>
对应的配置参数做用以下:
StartServers
启动Apache时建立的子进程数。
MinSpareServers
处于空闲状态的最小子进程数。
所谓空闲子进程是指没有正在处理请求的子进程。若是当前空闲子进程数少于MinSpareServers
,那么Apache将以最大每秒一个的速度产生新的子进程。只有在很是繁忙机器上才须要调整这个参数。此值不宜过大。
MaxSpareServers
处于空闲状态的最大子进程数。
只有在很是繁忙机器上才须要调整这个参数。此值不宜过大。若是你将该指令的值设置为比MinSpareServers
小,Apache将会自动将其修改为MinSpareServers+1
。
MaxClients
容许同时链接的最大请求数量。
任何超过MaxClients
限制的请求都将进入等待队列,直到达到ListenBacklog
指令限制的最大值为止。
对于非线程型的MPM(也就是mpm_prefork
),MaxClients
表示能够用于处理客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit
。
对于线程型或者混合型的MPM(也就是mpm_beos
或mpm_worker
),MaxClients
表示能够用于处理客户端请求的最大线程数量。线程型的mpm_beos
的默认值是50。对于混合型的MPM默认值是16(ServerLimit
)乘以25(ThreadsPerChild
)的结果。所以要将MaxClients
增长到超过16个进程才能提供的时候,你必须同时增长ServerLimit
的值。
MinSpareThreads
处于空闲状态的最小线程数。
不一样的MPM对这个指令的处理是不同的:
mpm_worker
的默认值是75。这个MPM将基于整个服务器监视空闲线程数。若是服务器中总的空闲线程数太少,子进程将产生新的空闲线程。mpm_netware
的默认值是10。既然这个MPM只运行单独一个子进程,此MPM固然亦基于整个服务器监视空闲线程数。mpm_beos
和mpmt_os2
的工做方式与mpm_netware
差很少,mpm_beos
的默认值是1;mpmt_os2
的默认值是5。
MaxSpareThreads
处于空闲状态的最大线程数。
不一样的MPM对这个指令的处理是不同的:
mpm_worker
的默认值是250。这个MPM将基于整个服务器监视空闲线程数。若是服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。mpm_netware
的默认值是100。既然这个MPM只运行单独一个子进程,此MPM固然亦基于整个服务器监视空闲线程数。mpm_beos
和mpmt_os2
的工做方式与mpm_netware
差很少,mpm_beos
的默认值是50;mpmt_os2
的默认值是10。
备注:ServerLimit
表示Apache容许建立的最大进程数。 值得注意的是,Apache在编译时内部有一个硬限制ServerLimit 20000
(对于mpm_prefork
模块为ServerLimit 200000
)。你不能超越这个限制。
使用这个指令时要特别小心。若是将ServerLimit
设置成一个高出实际须要许多的值,将会有过多的共享内存被分配。若是将ServerLimit
和MaxClients
设置成超过系统的处理能力,Apache可能没法启动,或者系统将变得不稳定。
注意:在配置相关参数时,请先保证服务器具有足够的硬件性能(例如:CPU、内存等)。 若是发现自启动后,随着服务器的运行时间增长,服务器的内存占用也随之增长,多是程序中出现内存泄露,请向下调整参数MaxRequestsPerChild
的值以下降内存泄露带来的影响,而后尽快找出程序中的问题之所在。
详细的能够看这个
http://www.365mini.com/page/apache-concurrency-configuration.htm