一、服务器操作系统选择
问:PHP+MYSQL环境选择Windows Server好,还是Linux好?
答:其实就服务器的操作系统而言,没有最好,只有最合适。如果自己熟悉什么系统,就用什么系统,只要优化配置得当,性能都不错。如果服务器操作系统都不熟悉,那就用Linux来搭建PHP+MYSQL环境吧,反正是需要学习或者是找服务商代配置。毕竟同一台机器,Linux上的PHP性能要比Windows高,这点是可以肯定的,但优化出色的Windows服务器也一定会比没做什么优化处理的Linux服务器性能强。
问:Linux服务器应该选用什么发行版本?
答:还是那个熟悉原则。不过都不熟悉的新手,建议用CentOS吧。由于CentOS源于 Red Hat 企业级 Linux(RHEL)的源代码,依照开放源代码规定释出的源代码所编译而成。由于CentOS开源特性,选择CentOS可以降低成本,同时又能够享受RHEL的服务支持。
问:服务器用CentOS7还是CentOS6?
CentOS7是在CentOS6基础上发布的新版本,与之前的版本相比,主要的更新包括:内核更新到3.10.0、支持Linux容器、LVM快照支持ext4和XFS、转用systemd、firewalld和GRUB2、XFS作为缺省文件系统、支持PTPv2、支持40G 以太网卡、在兼容的硬件上支持以UEFI安全启动模式安装,这其中最令人瞩目的新特性就是支持Docker技术。作为目前流行的应用虚拟化技术之一,Docker能够将应用程序与系统完全隔离,让其在系统之间实现迁移而不需要停机,提高了应用程序的移动性和灵活性。CentOS7在内核层面支持Docker容器技术,可以提高Docker稳定性和可靠性。如果以上特性都和要部署的应用没关系,而且服务器配置较低的话,那就用CentOS6吧。至于小版本号,越新越好,毕竟小版本一般是维护版本,修复各种BUG之类的。
问:Web 服务器用Apache还是Nginx?
现在 Nginx 才是 Web 服务器的首选。1、Nginx 静态处理性能比 Apache 高 3倍以上;2、Nginx轻量级,同样起web服务,比apache占用更少的内存及资源 ;3、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
二、PHP+MYSQL环境部署
问:Nginx+PHP+MYSQL如何安装?
答:如果是自己手动安装的话,这个需要另外写个教程,不过网上现有的教程也狠多。对于新手来说,推荐一键包安装。
问:Nginx+PHP+MYSQL的一键包选择哪个?
答:现在流行的一键包有LNMP,AMH,宝塔面板,WDCP等,其中LNMP最简洁,强烈推荐。做为生产环境,越简洁的问题越少,功能多了,带来的BUG也多。
问:Nginx+PHP+MYSQL各版本如何选择?
答:Nginx推荐1.14,稳定,性能不俗。PHP在程序兼容性没问题的情况下,可以选择最新版,但如果程序较早开发的,例如部分Wordpress插件,对PHP7存在兼容性问题,最稳妥的方法是选择PHP5.6。至于MYSQL的版本,对于低配置的服务器建议选择MYSQL5.6。内存达到2G或以上的主机,可以选择MYSQL 5.7。其实很多关于MYSQL性能测试的文章,对于大部分草根站长来说,基本没有意义。因为网站程序相对简单,访问压力也不大,所以所谓的升级提升的性能,几乎没感觉。(注:所有的小版本越新越好)
三、安装完成Nginx+PHP+MYSQL后,如何优化?
首先优化的原则是个性化的,是根据需求来优化的。但很多新手站长根本弄不明白自己的需求,更无从谈起优化方案了。这里给出1核CPU,1G-2G内存的服务器通用优化方案:
1、PHP开启opcache(开启方式可以上网搜,如果是LNMP一键包,可以用./addons.sh install opcache 进行开启)
2、PHP.ini配置
max_execution_time=300 //最大脚本运行时间
max_input_time=60 // 最大输入时间
memory_limit=64M //脚本内存限制
post_max_size=50M // POST数据最大尺寸
upload_max_filesize=50M //允许上传文件的最大尺寸
max_file_uploads=20 // 允许同时上传文件的最大数量
default_socket_timeout=60 // Socket超时时间
3、php-fpm配置文件php-fpm.conf
pm.max_children = 30 // 允许创建的最大子进程数
pm.start_servers = 5 // 起始进程数(服务启动后初始进程数量)
pm.min_spare_servers = 5 // 最小空闲进程数(清理空闲进程后的保留数量)
pm.max_spare_servers = 20 // 最大空闲进程数(当空闲进程达到此值时清理)
4、MYSQL配置文件
key_buffer_size=128MB // 用于索引的缓冲区大小
query_cache_size=64MB // 查询缓存,不开启请设为0
tmp_table_size=64MB // 临时表缓存大小
innodb_buffer_pool_size=256MB // Innodb缓冲区大小
innodb_log_buffer_size=16MB // Innodb日志缓冲区大小
sort_buffer_size=768KB // 连接数, 每个线程排序的缓冲大小
read_buffer_size=768KB // 连接数, 读入缓冲区大小
read_rnd_buffer_size=512KB // 连接数, 随机读取缓冲区大小
join_buffer_size=1024KB // 连接数, 关联表缓存大小
thread_stack=256KB // 连接数, 每个线程的堆栈大小
binlog_cache_size=64KB // 连接数, 二进制日志缓存大小(4096的倍数)
thread_cache_size=64 // 线程池大小
table_open_cache=128 // 表缓存(最大不要超过2048)
max_connections=120 // 最大连接数
5、将以下代码添加到nginx的主机配置文件中,实现静态资源缓存,其中7d代表缓存7天。
location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$
{
expires 7d;
}
location ~ .*\.(?:js|css)$
{
expires 7d;
}
location ~ .*\.(?:htm|html)$
{
add_header Cache-Control “private, no-store, no-cache, must-revalidate, proxy-revalidate”;
}