1:先补补Linux系统和服务器的基础 打好Nginx运行的环境基础

【学习前准备工作 强调几点注意事项】

之前看过序章的朋友 一定还记得大米跟大家提过, 一个最最简单的网站(静态网站)基础框架组成部分是什么?

那就是 NGINX(WEB服务器) + 服务器 + 操作系统(Linux)

这里给大家补充说明几点

第一: 首先 咱们先来说一下Linux这个重头戏的组成部分,Linux因为它的开源以及稳定等等的优质特性,现如今已经基本统一了服务器操作系统的标准,说真的 现在去机房 再想找出一台不是跑着Linux的服务器(跑着其他的系统) 估计挺难的了

在我们的专栏中(包括后续的专栏)全部都是基于Linux给大家搭建环境 并讲解的

所以 本专栏需要大家对Linux 有一定的基础后 再继续阅读
(本专栏中 涉及到的 过于基础的Linux知识 我们就不再额外花篇幅讲解了 )

第二:关于服务器,在序章的时候 跟大家说过 它指的是一台物理服务器 , 所谓的互联网 其实不过就是 由无数无数的物理服务器连接在一起 最终绘制而成的(比较有经验的同学 可能会抬杠了, 谁说都是物理服务器的,现在很多不都是云虚拟机了吗? 问的对,现在确实很多中小企业 都不再购买真正的物理服务器来搭建自己的"互联网产品", 但是 归根到底,云机只不过是针对企业用户或者个人用户来说的, 从技术层面上说, 云机是通过虚拟化技术 在物理服务器上 划分出的区域 本质永远脱离不了 本体的物理服务器)

然而 在我们的专栏学习的过程中,服务器是每个人必须准备的, 然而为了学习而购买一台上万的物理服务器肯定不现实 也没有必要
(因为我们并不是真的要 搭建一个被好几万人访问的网站 )

这里推荐大家 两种方式来 搭建我们的服务器(虚拟机)

第一种 (推荐):在活动折扣期间 购买任意云平台的 最低配置虚拟机两台(学习过程中 最少使用两台 三台最佳 后面会讲解为什么)

这样的做法 是大米比较推荐的,虽然会产生一定的费用(折扣活动期间 最低配的一台云机 一年也不过100-200块钱而已 比较划算 )然而 灵活性非常的高 因为购买的云机 可拥有公网IP地址 可以在任意地点登录使用和维护 这样以来 就对地点不再局限 可以在任意地方进行远程登录

另外 现在大多数云平台的云机 都支持按量付费 也就是说 用的时候才会产生费用 (一天几毛钱到几块钱 看配置高低 和 使用时长了 基本按照小时出账单) 用完后释放 就不会再产生费用, 需要注意的就是 千万别弄高配置 高带宽 那费用成指数上升 就很吓人了 一切就按最低配置来即可 学习足够用了

另外还有一个好处,就是多接触各类云计算平台的使用方法 对以后想从事运维工程师相关工作来说 是一个非常好的锻炼和准备

第二种(免费):这个自然就是 使用我们的笔记本 或者 PC台式机 安装Linux虚拟机

估计大多数人还是会选择这样的方式来安装Linux虚拟机 , 毕竟免费嘛 ^_^

这里 强烈推荐大家使用 virtual box 来安装虚拟机(因为简单 又免费) , Linux镜像选择Centos6/7 即可

关于如何在windows上使用virtual box安装虚拟机,这个非常简单 度娘一搜就一堆 这里就不再跟大家啰嗦了
(唯一有点麻烦的就是 需要提前下载好一个 Centos.ios的镜像文件 这个文件很大 最好常备一份儿)

最稳妥的方式 推荐大家在接有网线的 台式机 或者 笔记本上 安装虚拟机三台, 网络选择"物理桥接即可"
然后每台Linux虚拟机 手动分配固定IP (不要用DHCP自动分配 不然时不时变IP非常讨厌, 所以服务器99%的情况 都是手动分配固定IP)

第三:解释一下什么叫做 静态站点和动态站点

关于什么是静态和动态站点 我们之前跟大家提过两次, 在这里 咱们来解释一下意思

静态网站? 网页都是静止不动的? 只要画面有变动就成动态网站了? 是这个意思吗?

其实不是的哦 -_-

所谓的静态网站 准确的定义 是网站所提供的网页内容对于所有来访的用户都是保持一致 不随用户的互动动作而计算且发生变化 除非是服务器端的静态资源(例如 文字 图片 视频 动画 声音)发生了改变

这里理解起来可能会产生误区,比如 有的学员可能就会问 比如打开一个纯看图片的网站,这算是静态了对吧, 可是当我鼠标点击站内另外一个图片链接的时候,画面就变了唉 这不就是随着我的动作发生改变了吗? 变成动态网站了?

大米给大家的解释是,没错 这里点击另外的图片 确实是画面发生了改变, 但是这并不是动态网站效果 为什么呢?

因为 另外的图片链接原本就存在在站内,只不过是当你点击到了 才看到而已, 这里的动作只是发生了页面跳转 而并不是根据你的动作和输入 经过计算后发生改变

这么解释 估计还可能有同学不是很明白,不用太着急 接下来 咱们看一下动态网站的定义 再返回头来看 就明白多了

那什么是动态网站呢?

最直接简单的例子 就是一个登录欢迎页面

就像上面这张图这样, 大家都见过吧, 网页一上来就先让你输入用户名和密码

输入完成之后(比如:张三 123456) 然后会有一个对应的"程序" 把你输入的账号和密码 携带着去到数据库里查验

看看这个账号是不是存在, 再看看密码是否正确, 如果错误 就返回失败, 如果正确 就返回 一个页面写着 欢迎你 张三

这种就属于动态网站的功能, 因为网站跟用户有交互的动作, 用户会有数据的提交 ,而且根据每个用户输入数据的不同 返回的结果可能都不一样 比如 李四登录成功 就显示 欢迎你 李四, 别人登录成功的话 就会变了

除此之外 动态网站还有两个非常重要的组件 , 那就是 网站后面有程序代码在运行和判断 还有动态网站 必然存在数据库的支持 (静态网站一般没有)

另外 从URL(也就是你输入的网址 也可以进行判断)

静态网站 更多以 .htm .html .xml结尾, 而动态网站 更多以 .php .asp .jsp .cgi (CGI通用网关接口 是最早实现动态网站的技术 大米之前在序章提过的)等等结尾 在动态网页网址中有一个标志性的符号——“?”,如有这样一个动态网页的地址为:
http://www.testdami.com/index.php?id=12345

其实现阶段来看 动态网站和静态网站 基本上已经不是独立存在的了, 绝大多数情况 都是混合再一起的网站 既有静态又有动态

就拿我们平时尝尝访问的几个门户网站来说, 一般都带有新闻首页对吧 上面附带着大量的静态页面内容(文字 图片 等等), 然而与此同时 所有门户网站 都支持 用户注册登录 邮箱 搜索等等动态网站的内容

在我们的专栏的课程中 我们先做出和搭建一个最简单的静态网站为目标 后面会再加入动态网站的内容

提问:既然网站有静态和动态之分 那NGINX是不是都可以支持呢?

回答:NGINX本身只有处理静态WEB的能力 ,处理动态站点的话 NGINX本身不会自己去处理 但是它拥有的模块 (fastcgi->主要用来传递PHP , uwsgi->主要用来传递python web)会识别动态请求 进而把请求传递给后端的其他程式来处理

【开始准备我们学习用的Linux服务器吧】

接下来 咱们就可以着手准备我们的服务器了

大米假设大家到了这个时候 所有的Linux虚拟机都已经安装完毕了哦 ^^

接下来 我们的服务器 需要完成一些环境的配置工作 才可以正常使用的哦

  • 首先是Linux的FQDN设置

首先咱们先确认 我们的虚拟主机拥有 完整主机名(FQDN) 并且可以相互ping通哦

Linux上完整主机名的配置 不光是对于NGINX, 对于其他任何服务来说 都是非常重要的

有些服务 如果检测不到正确主机名的配置 就会不断报错 甚至无法使用

另外 在生产环境中的Linux服务器,完整主机名的配置是硬性要求 因为当服务器数量大了以后,混乱的主机名会给维护带来极大的不便

完善的主机名 最简单的理解 就是 一个主机名+域名 来组成 而并不仅仅只是给机器起个名字这么简单哦 ^^

主机名:代表的是机器本身 域名:代表的是处在哪个域

例如 server001.study.com. 主机名是 server001 , 域是 study.com

就用Centos6为例子 我们按照如下的方式操作和最终验证即可

如上图中所示 一共有 三个地方需要修改 一个是 /etc/sysconfig/network 当中定义 HOSTNAME
再一个就是 /etc/hosts下面的设置

/etc/hosts 是一个非常重要的 Linux解析配置文件, Linux最早就是依靠它 来完成 机器名和ip地址的转换工作
比如 在上面图中 /etc/hosts文件 定义了咱们三台机器的 机器名和IP地址对应关系

server01.example.com server02.example.com server03.example.com
另外 在每一行的最后还定义了一个短名称 这个叫做别名

这样以来, 三台机器之间 就可以相互使用 完整机器名 或者其别名 来调用了

最后的 hostname -f (-f代表FQDN) 可以正确显示完整主机名 即可

接下来 我们检查Linux内核版本 请保证内核版本在2.6以上
为什么呢? 因为2.6以上版本的Linux内核 才支持epoll

说到这里会有疑问了 epoll又是个啥?(经常配置nginx的同学 一定见过 或者听说过这个词)
其实这里相关的有三个主要词汇 select , poll , epoll

这几个是nginx配置文件中 可选的配置项(events模块 ,后面会讲到)

这里容易有个误区 ,以为这三个选项 是nginx独有的"特性" ,实则不然

select/poll , epoll 其实是Linux内核中 多路复用I/O的 三种方法,跟nginx其实并没有直接的关系

如果要真的完全解释清楚 这三种模式在Linux内核中的实现方法 是相当复杂的

我们在当前可以先简单按照如下 理解即可

首先 这三种模式 都是Linux内核 为了解决处理高并发问题而设计的

随着内核的发展 诞生的先后顺序为 select -> poll -> epoll , epoll可以理解为 poll方法的增强版

其实 这三种方法的本质 都是多路复用 提高内核处理网络连接的工作效率

那多路复用又是个啥?

以一个生活中的例子来解释一下吧(如下一段 取自别处 个人认为很恰当的例子).

假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面.

如果你使用的阻塞IO模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的.

现在时代变化了,开始使用多路复用IO模型来处理这个问题.你告诉你的朋友来了A号楼找楼管大妈,让她告诉你该怎么走.这里的楼管大妈扮演的就是多路复用IO的角色.

既然 明白了什么是 多路复用 那么我们看下三种方法的区别

select版大妈做的是如下的事情:比如同学甲的朋友来了,select版大妈比较笨,她带着朋友挨个房间进行查询谁是同学甲

而poll和select差不太多, poll只是解决了 select的 FD问题, 但是本质并无大变化 依然无法很好支持高并发(文件描述符的限制 ,感兴趣的同学 可以自己搜索相关文章)

epoll版大妈就比较先进了,她记下了同学甲的信息,比如说他的房间号,那么等同学甲的朋友到来时,只需要告诉该朋友同学甲在哪个房间即可,不用自己亲自带着人满大楼的找人了

理解到这里 目前就够用了

接下来 检查内核版本的方法很简单 如下
符合我们的要求

接下来 咱们在 Linux上 (Centos) 使用yum 安装一些软件, 这些软件都是nginx必备的 我们分别来解释一下
(yum就不用多介绍了吧 Centos/Redhat Linux 最重要的 软件包安装管理工具)

如下安装的这些插件 如果是平时经常配置NGINX的同学一定很常见,但是我们要知其所以然 不能总是跟着网上搜来的安装教程复制几个命令一跑完事

1: gcc编译器的安装

C/C++语言编译器 我们后面的课程中 nginx最终都会采用源代码编译的方式来安装
(Linux下两种安装nginx的方式, yum 和 源代码编译 , yum安装的 直接就可以执行,简单方便 但是无法自由扩展nginx功能, 源代码编译的方式 是把nginx的源代码下载下来,然后我们自己通过编译器 自己按照需求 生成我们需要的nginx ,这个方式麻烦的多 但是 却自由度很高 也是企业中绝大部分的 部署开源软件的方式)

况且 后面也会讲到 自行修改开发nginx模块, 这些都离不开C/C++编译器的哦
(不管是想学好Linux 还是深入Linux上运行的各种开源软件, C语言都是必不可少的)

安装的方式很简单
yum install -y gcc gcc-c++

2: PCRE库的安装

PCRE这个平时应该也挺常见的吧 :) , 其实它的全称是 Perl Compatibel Regular Expressions : Perl兼容正则表达式

意思也就是说 ,如果你的NGINX以后在配置的过程中 需要使用正则表达式 就必须装这个插件(PCRE)
(所谓的正则表达式 就是一种使用各类特殊符号 来达到匹配或者过滤 字符串的目的 是一种通用技能)

类似就是这样的配置 :

rewrite ^(.*)index.php\?$ http://10.86.255.119$request_uri;

看着就头晕有点 对不? ^_^ (其实这已经算很简单的 正则了)
确实 正则表达式 不好学 很不容易找规律 而且最关键的是不好记忆 但是又非学不可
(后面我们会有专门的篇幅来学习它)

安装的方式也很简单

yum install -y pcre pcre-devel

3: zlib库的安装

nginx处理HTTP响应的时候,是可以支持gzip先压缩 后传输的方式 进而来减少网络传输量的哦
如果你希望nginx开启这个功能,就得把zlib编译进入nginx中

yum install -y zlib zlib-devel

4: OpenSSL库的安装

HTTPS大家不陌生吧 ,HTTP+SSL形成的更安全的传输协议 , 这个库几乎是默认必须安装的
现在基本上大部分网站 都支持HTTPS 只有一部分接口依然走HTTP , 这也是大势所趋了

yum install -y openssl openssl-devel

上面安装的几个软件包 只不过是完成Web服务器最基本功能所需的,后续 随着我们不断的深入学习,还有可能继续再增加别的软件包扩展 目前先了解清楚 这四个

必要的软件包装好了以后,咱们最后来看一下Linux内核参数的优化

大米先给大家解释一下 为什么要优化内核

我们平时总说 性能调优 性能优化之类的话对吧 其实说白了 就是通过各种参数调整 让服务器的性能达到最大化

一个服务器上其实是存在这么几层的嵌套关系的 从最底层开始 依次是

物理硬件 操作系统 服务软件 程序代码

其实优化的最终目的 是发挥物理硬件的最大效能 因为物理资源是不能随意改变的

至于硬件往上的部分 其实是层层嵌套的关系 一个会制约另一个 就好比 操作系统中的最大连接数没有放开 但是服务软件配置中的放开了 也是没有作用的 所以 这种嵌套关系有点像接在一起的 水龙带 光是一段很宽没用 必须都宽才行

接下来 咱们看下 针对咱们即将安装的Nginx , Linux的内核参数优化 应该掌握些什么

由于默认的Linux内核参数是最通用的场景,不符合咱们一直谈的支持高并发的特性,所以 我们需要做出一些初步的调整 把操作系统 这一层的"水龙头" 放开一些 ^_^

fs.file-max = 100000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000

内核的参数项目很多,因为我们在这儿不是专门讲Linux内核优化的 所以先拿出几个例子来简单说一下

file-max 进程可以同时打开的最大句柄数 (听说过Linux一切皆文件的说法吧) 这一项直接限制最大并发连接数

tcp_tw_reuse 允许将处于 TIME_WAIT状态的socket重新用于新TCP连接, 平时我们在服务器上 应该能看到大量的 TIME_WAIT状态的链接对不?(netstat -an | grep -i wait) ,这对于处理高并发的服务器来说 意义很大

keepalive_time 这个参数表示 TCP发送keepalive消息的频度 ,默认是2个小时 这太长了。。。 设置的小一些 有利于清理无效的链接

port_range TCP/UDP 连接的端口范围 , 建立一个连接就肯定会消耗掉一个端口 ,如果不把这个值改大了 高并发的时候 连接就无法建立了。。

做好如上的准备后 我从下一篇开始接触NGINX啦~

原文地址:http://blog.51cto.com/13529208/2331890

时间: 2024-07-31 02:26:51

1:先补补Linux系统和服务器的基础 打好Nginx运行的环境基础的相关文章

linux系统ftp服务器详解

匿名FTP服务 1.检查并安装vsFTPD软件包在终端窗口输入命令:"rpm –qa|grep vsftpd 命令检查系统是否安装了VsFTPD软件包,如下图所示:如上图所示 vsftpd 软件包并没有安装,可以使用命令 yum install vsftpd –y 进行安装 查看是否已经安装成功使用命令 rpm –qa vsftpd 如上图所示已经成功下载安装了软件包vsftpd VsFTPD在安装时会自动创建FTP系统用户组ftp,和属于该组的FTP系统用户ftp, 该用户的主目录为/var/

linux系统vps服务器简单安全配置

虽然说linux 系统比windows安全性要高一些,不过一些简单的安全配置也是必要的.因为毕竟现在市面的破译工具太多了,如可以社会工程学你密码.那么就一起看学习下入门级安全配置吧. 工具/原料 linux 系统 vps或者服务器 DDos deflate 方法/步骤 第一.远程管理端口.市面上有很多工具采用字典方式套取你的管理员密码,我们至少可以创造一些麻烦出来.修改ssh 的登陆端口,默认端口是22.扫描字典穷举密码他们都是从默认的开始.如果你把端口改成4位数的也大大提高了他们的难度及时间.

Linux系统FTP服务器搭建与配置

一.简介 1.简介 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种哦协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载(Download)"和"上传(Upload)". 下载文件就是将文件从远程主机拷贝到自己的计

linux系统Samba服务器的搭建与配置

一.Samba概述 1.概述 Samba是在Linux和Unix系统上实现SMB协议的一个免费软件,有服务器及客户端程序构成.SMB是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务.SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统.打印机及其他资源.通过设置"NETBIOS over TCP/IP"使得Samba不但能与局域网主机分享资源,还能与全世界的电脑分享资源. 2.协议 SMB(Serv

linux系统centOS6.5使用goaccess工具分析nginx网站日志

网站的log日志分析是每个站长经常做的必备工作,通过网站日志文件我们可以分析各大搜索引擎对网站的爬取情况.最近我的网站做了一些调整,所以想看下日志文件,但因为网站服务器环境是LNMP,所以我就找了一款nginx日志文件分析工具--goaccess.本文我们将一起分享如何在linux(centos)中安装goaccess来分析网站日志. 准备工作: 系统:CentOS6.5(我在本地搭建的虚拟机) web服务:nginx 日志文件:access.log文件(从自己的环境中拷贝具体日志文件) 工具:

Linux系统用户权限管及目录、文件的管理(基础详解,操作演示,通俗易懂)

用户账号和组账号 Linux系统是基于用户身份对资源访问进行控制,Linux的用户账号分为以下三类: 超级用户:就是root用户,在所有用户中它拥有最大的权限 ,管理着普通用户,可以说你有了一台服务器的root权限,那这台服务器基本就是你的了. 普通用户: 一般用户,其使用系统的权限受限,可以使用root账户对其管理. 程序用户:也叫系统用户,保障系统运行的用户,一般不可人为登录系统. 常用的组账号一般分为两种: 基本组:也叫私有组,一般在创建账号时系统默认给每个账号都创建一个与自己同名的基本组

在Linux系统下使用Docker以及Weave搭建Nginx反向代理

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

linux系统rsync服务器的管理与配置

一.rsync远程同步服务器 简介: Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用Rsync同步本地硬盘中的不同目录. Rsync是用于取代rcp的一个工具,Rsync使用所谓的"Rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. Rsync支持大多数的类Unix系统,无论是Linux.Solaris还是BSD上都经过了良

Linux系统DNS服务器的搭建与配置

一.简介 1.DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到主机名对应的IP地址的过程叫做域名解析. 2.DNS域名系统的作用 1)正向解析:根据主机名(域名)查找对应的IP地址 2)反向解析:根据IP地址查找对应的主机域名 3.DNS系统的工作模式 1)递归查询: 客户端向DNS服务器的查询为递归查询,DNS服务器一定要返回地址,如果不知