服务器小白来求教了…
因为一直使用的是虚拟主机,或者类似 SAE 那样的 PaaS 平台,没有接触过自己搭建服务器的流程,对这方面完全不懂…
现在由于阿里云、腾讯云之类的 VPS 服务价格慢慢下调,门槛也越来越低,以及受限于虚拟主机和 PaaS 平台的一些限制(例如 SSL),想自己学习一下一台生产环境的服务器的部署流程,希望各位服务器前辈、运维前辈,可以指点指点。
假定服务器为 Ubuntu 14.04 系统,并且希望:
系统不一定是要 Ubuntu,也可以是 CentOS 或 Debian,希望能入门容易一些就行。
能够跑 PHP 网站,最好是 PHP 7,部署完之后有哪些是必须优化的?
同时运行 MariaDB 或 MySQL 数据库,权限啊、远程访问啊,这一类是不是有特殊配置?
使用 Nginx 做 web 服务器,以及如何部署 HTTPS 网站?
使用 Git 进行代码发布,是不是要涉及 hook 之类的?
服务器的用户权限应该如何进行必要配置?基本的安全防护应该做哪些事?
既然是生产环境,那是否应该定时备份网站数据?有什么比较方便的方式?
全部手动安装,不要使用那些一键包。
我知道细节的优化是需要长年累月的经验,并不是几句话能够说清楚的,但我不求能完善到什么程度,主要以学习为目的,希望各位大神、前辈,能不吝赐教,谢谢大家!
配一台 Web 服务器这个问题太泛了,要知道每一门语言都可以提供 Web 服务,Web 容器的种类也十分繁多。
这里只讲一些最基本的事项吧。
Q:那么到底如何开始学习配置一台 Web 服务器?
A:你首先需要知道用户访问Web服务所经过的流程,逐个击破。
0x01 了解 Web 请求流程
1.用户打开浏览器后输入网址,并回车。
2.浏览器开始查询网址的DNS纪录,并对查询到的纪录发起请求。(购买域名/DNS记录都是什么/配置域名的DNS)
3.服务器的Web容器(如Nginx/Apache等)接收到请求,并根据浏览器发送过来的HTTP头开始工作。(HTTP头/常见Web容器/如何配置这些Web容器和后端程序协同工作)(注:Web容器不是必须存在的,但却是最常见的处理Web请求的流程的一部分)
4.后端处理收到的请求
5.Web容器从后端程序获得最终的结果,并将结果和HTTP回复头一起返回给浏览器
6.浏览器展示结果
基本流程说完了,看看有哪些自己概念模糊甚至完全不懂的地方,搜索一下,弄清楚之后继续向下看。
0x02 服务器部署
1.熟知常用指令,至少日常操作服务器不要把大量时间用在查基本指令怎么用上,打击自己的积极性。
2.创建一个自己的低权限账户,不要通过ssh直接登录root账户操作,对于防止自己误操作,提升安全性都有帮助。
3.学会使用包管理器,就是用来安装软件的那个指令。CentOS/RedHat是
yum
,Debian/Ubuntu是apt-get
4.开始安装你阅读了 0x01 之后你觉得需要安装的东西...
5.使用包管理器找不到的软件,或者版本不如意的软件,学会下载源代码,编译,安装到指定目录。
另外:搞清楚
$ ls -lhta
列出目录/文件后,前面的那些东西的意义。部署完之后,你现在应该能够跑起来服务了,并且能够访问你的页面了,但是在上线之前,看看下面的基本安全常识。
0x03 基本安全常识
部署安全
系统
:禁止ssh的root账户登录,创建一个自己的低权限账户平日管理服务器使用,使用sudo
或者su
到root账户来进行提升权限的操作;所有账户使用强密码,或者仅允许使用publickey通过ssh登录;系统内核常升级Web容器
:常升级仅对于PHP
:禁用eval的使用Mysql
:如无需要,关闭所有账户的远程登录;不要让程序使用root账户连接数据库,尽量细化账户权限分配;账户不要使用太弱的密码代码部署
:如果你选择使用git/svn等版本管理系统来部署和更新代码,禁止用户访问.git/.svn这些用户不该访问的目录;不要让Web容器跟随软链接;对各个文件和目录(包括Web程序的根目录)的 权限/所有者 的配置,遵循最小化原则;不要偷懒其他
:默认的东西统统不要留,比如apache的server-status,phpMyAdmin的目录名称起一个复杂一点的,至少不要用pma,pma123这种随手猜的名字。程序安全
警惕一切用户提供给你的数据,预防sql注入,文件上传,xss,csrf等攻击
安全方面配置到这里,基本能挡住大多数的ScriptKid了
0x04 最重要的
打了这么多字累死我了,好歹给个赞吧?