nginx是一个web服务器,反向代理,负载均衡,邮件代理。
我们这里主要学 web 服务器 部分的功能。
由于nginx运行时需要的系统资源比较少,所以经常被称呼为 轻量级服务器。
nginx是一个服务器软件,是用C语言开发的。nginx是开源的。
nginx号称并发处理百万级别的TCP连接,非常稳定。热部署(运行的时候能升级),高度的模块化设计。自由许可证。
因此,开发者 可以 开发自己的模块来增强 nginx 功能。第三方业务模块可以用C++开发
nginx 在 linux 平台下,高并发使用的epoll 技术。
因此这门课程一定会学习 epoll 技术。
高性能,单机10万的并发,且能能够保持高效的服务。
epoll这种高并发技术的好处就是:高并发只是占用更多内存就能做到。
nginx中有内存池,进程池,线程池,事件驱动等技术。
学习研究大师级的人写的代码,是一个程序开发人员能够急速进步的最佳途径。
nginx使用了epoll 技术,epoll 技术要求linux的版本在2.6以上。
uname -a
当前的版本是 4.15.0-142-generic
gcc一般是用来编译c程序的
g++一般用来编译c++程序的
sudo apt-get install build-essential 编译程序必须得一个软件包
sudo apt-get install gcc
sudo apt-get install g++
使用 gcc -v 和 g++ -v 看是否安装成功
sudo apt-get install libpcre3-dev
sudo apt-get install libz-dev
sudo apt-get install libssl-dev
nginx 官网:http://www.nginx.org
mainline版本:有最新的功能,更新快,稳定性差
stable版本:稳定版本,被认为经过了长时间的测试,比较稳定,一般我们选择这个。
点击网站右边的download
legacy版本:以往的老版本
可以通过命令安装。但是有很多第三方模块可能不包含。
可以通过编译 nginx源码的方式,好处是可以把第三方模块弄进来。主要学习这种。
下载源码
下载下来后,肯定要放在linux中的某一个文件中,然后解压,解压命令如下:
tar -xzvf nginx-1.14.2.tar.gz
auto/ 是一堆shell 脚本
cc/ 检查编译器的脚本
lib/ 检查依赖库的脚本
os/ 检查操作系统类型的脚本
type/ 检查平台类型的脚本
CHANGES 是一个说明文件,说明改动了一些啥
CHANGES.ru 俄语版的说明文件
conf/ 是一个目录,默认的配置文件
configure 编译nginx之前必须执行的脚本,在执行configure 的时候会用到 auto里面的shell 脚本。执行完毕后,会产生一些中间文件,后续会用到
contrib /这是一个目录,里面存储的是脚本和工具,典型的是vim高亮工具,我们可以使用contrib下的vim看相关的nginx的配置。会多一些高亮显示
html / 缺省的index.html,欢迎界面和错误界面
man / nginux- man命令帮助,nginux也是支持一堆命令的。
src / 是源代码目录 最最要的就是这个
core:核心代码
event:事件模块相关代码
http: http(web服务器)模块相关代码
mail:邮件模块相关代码
os:操作系统相关代码
stream:流处理相关代码
执行完了./configure后,会生成一个objs目录。
objs目录下最重要的一个文件是ngx_moudles.c文件,这个.c文件内容决定了我们一会编译nginx的时候有哪些模块会被编译到 nginx中来。
执行完了./configure后,会生成一个makefile文件。
在执行make命令时会用到
编译第一步:用configure来进行编译之前的配置工作。
先使用 ./configure --help 查看说明
--prefix=PATH 设置安装到哪里去
--prefix 指定最终安装到的目录:默认值 /usr/local/nginx
--sbin-path=PATH 指定可执行文件装在哪里 默认值是 sbin/nginx
也就是说:前面两个在不设置默认值的case下:最终的这个可执行文件安装的目录为:
/usr/local/nginx/sbin/nginx
--conf-path=PATH 用来指定配置文件目录,默认的是conf/nginx.conf
也就是说:安装完成后,完整文件目录应该在 /usr/local/nginx/conf/nginx.conf
总的来说后面所有的配置什么的,都是在 --prefix=PATH 之后
我们当前都使用默认的配置
a ) ./configure
执行完了./configure后,会生成一个objs目录。
objs目录下最重要的一个文件是ngx_moudles.c文件,这个.c文件内容决定了我们一会编译nginx的时候有哪些模块会被编译到 nginx中来。
执行完了./configure后,会生成一个makefile文件。
在执行make命令时会用到
b)用make 命令编译
make执行完毕后,在objs目录下会重新生成一个 ngnix文件,这个就是可执行文件。
c)用make install 命令开始安装,实际上就是将生成的上述这些文件 最终安装目录 /usr/local下。。我们在没有执行 make install之前 观察 /usr/local这个目录下,并没有/nginx目录。使用make install 后,在 /usr/local下面就能看到这个目录了。
我们再近代nginx 目录下看:
就会看到,前面我们说的--sbin-path --conf-path
./configure 执行完毕后,会生成一个objs目录,该目录下有一个重要的ngx_moudles.c文件,这个.c文件内容决定了我们一会编译nginx的时候有哪些模块会被编译到 nginx中来。
/home/hunandede/nginx/nginx-1.14.2/objs/ngx_modules.c
在安装完成后,安装目录下有一个 nginx.conf 文件决定了 :worker 进程的数量,每一个worker进程可以支持的访问的最多人数等。
cd /usr/local/nginx/conf/nginx.conf
sudo vim nginx.conf
我们先使用 ps- ef | grep nginx 查看当前linux中进程是否有nginx
ps是查看linux中进程的信息,
-e 显示所有进程。
-f 全格式。
| 将前面的信息做为一大块
grep 查找啥,过滤啥 ; nginx 为要查找的关键字
cd /usr/local/nginx/sbin
sudo ./nginx
然后再使用 ps -ef | grep nginx 查看当前进程,并过滤关键字nginx
hunandede@hunandede-virtual-machine:~/nginx/nginx-1.14.2$ ps -ef | grep nginx
root 14539 1 0 16:09 ? 00:00:00 nginx: master process ./nginx
nobody 14540 14539 0 16:09 ? 00:00:00 nginx: worker process
hunande+ 14542 4604 0 16:09 pts/4 00:00:00 grep --color=auto nginx
如上,前两个就是nginx 进程
最后一个不是的,最后一个是我们使用 ps -ef | grep nginx 命令的进程
当前linux 的ip 是192.168.31.203 可以使用 ifconfig 查看
在windows 打开浏览器,输入 http://192.168.31.203,回车,看是否有界面。
windows这边相等于找 IP 为 192.168.31.203 的机器,端口为80的 机器。
而nginx 恰好监听的就是80端口,因此会给windows回复信息,那么在 windows的浏览器上就能看到了。