百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Nginx从入门到放弃01-nginx基础安装篇

liebian365 2024-10-26 13:04 19 浏览 0 评论

什么是Nginx

nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。Nginx是一个轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发。

笔者把自己总结的文档分为几遍,合集在 https://g.xgss.net/nginx/

Nginx优点

跨平台、配置简单。 非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发。 内存消耗小:开启 10 个 Nginx 才占 150M 内存。 成本低廉,且开源。 稳定性高,宕机的概率非常小。 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。

Nginx和Apache对比

静态文件处理能力:nginx高于apache

资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。

Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。

nginx本身就是一个反向代理服务器,而且支持7层负载均衡。

nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。

Nginx应用场景?

1.HTTP服务器(web服务器)

可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

2.静态服务器

可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

3.反向代理or正向代理

打个不恰当的比喻:

反向代理就如同你去某个大楼的前台需要找某人,前台帮你找到这个人,这个人来负责处理事务,而这个前台就相当于你的反向代理。

正向代理如同你是某个公司的CEO,让你的助理去找某人,这个助理就是你的‘正向代理’,应用最广泛的就是代理上网。

反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。

此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。

4.负载均衡

负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

普通请求和响应过程如下图:

但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。

我们首先想到的是升级服务器配置,可以由于摩尔定律的日益失效,单纯从硬件提升性能已经逐渐不可取了,怎么解决这种需求呢?

我们可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。

5.动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

动静分离之前的状态:

动静分离之后:

Nginx版本

在官方版本中有开源免费版的nginx商业版的nginx plus

开源版官网:nginx.org

商业版官网:nginx.com

除了官方的nginx发行版,还有一些其他的、比较有名的nginx发行版,比如阿里巴巴的”Tengine”,或者”OpenResty”,如果对openresty有兴趣可以参考Centos7安装openresty实现WAF防火墙功能

免费开源版的nginx上,开源版在细分之下,还有三个小类:”主线版本”、”稳定版本”、”历史版本”。

nginx版本下载页面:http://nginx.org/en/download.html

那么这三类版本有什么不同呢?通常来说,三类版本的含义如下:

主线版本

“Mainline version”,也有人称之为主干版或者开发版,主线版本通常是最新的版本,主线版通常会加入一些最新的功能,这些功能可能没有经过太多的测试,所以相对可能不太稳定,在真正的生产环境中,通常不会使用主线版本。

稳定版本

“Stable version”,稳定版通常是由主线版发展而来的,稳定版通常是经过官方测试的,是官方认为相对稳定的版本,生产环境中通常会使用稳定版。

历史版本

“Legacy version”,当新的稳定版出现,那么原先的稳定版就会被归类到”历史版本”中去。

Cenots7安装Nginx

现在以Centos7系统安装nginx的两种方式

一、YUM安装Nginx

1、添加CentOS 7 Nginx yum资源库

# rpm -Uvh  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

当然也可以创建nginx官方yum源文件,此处创建的源文件为/etc/yum.repos.d/nginx.repo

# vim /etc/yum.repos.d/nginx.repo
添加:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

2、安装nginx

#  yum -y install nginx

3、启动nginx

# systemctl start nginx

4、开机自启动(非必须)

可能的操作,nginx跟随系统自启动:

# systemctl enable nginx.service

5、防火墙设置(非必须)

开启防火墙端口或者关闭防火墙,开放80和443端口

Iptable:

# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# iptables -I INPUT -p tcp --dport 443 -j ACCEPT
# service iptables save
# systemctl restart iptables
或者直接关闭iptables
# systemctl stop iptables

firewall-cmd:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=443/tcp --permanent
# firewall-cmd --reload

6、安装完成,可以在浏览器访问IP

完成上述配置即可成功安装nginx,很简单吧。

卸载nginx

# yum remove nginx

二、源码包安装Nginx

现在来看看怎样源码包编译安装nginx

1.安装编译器

yum install -y gc gcc gcc-c++

安装依耐包

# yum install -y pcre-devel zlib-devel openssl-devel  libxslt-devel GeoIP-devel perl-ExtUtils-Embed

2.从官网下载nginx

http://nginx.org/en/download.html

我下载稳定版nginx-1.22.0,并将下载后的包解压

# mkdir -p /data/nginx   # nginx安装到此目录
# mkdir -p /data/software/

cd /data/software/
# wget http://nginx.org/download/nginx-1.22.0.tar.gz
# tar -zxvf nginx-1.22.0.tar.gz 

进入解压目录,查看其内部的文件结构,如下

# cd nginx-1.22.0
# ll
total 800
drwxr-xr-x 6 vsftpd vsftpd    326 Jun 23 11:05 auto
-rw-r--r-- 1 vsftpd vsftpd 317070 May 24 07:59 CHANGES
-rw-r--r-- 1 vsftpd vsftpd 484445 May 24 07:59 CHANGES.ru
drwxr-xr-x 2 vsftpd vsftpd    168 Jun 23 11:05 conf
-rwxr-xr-x 1 vsftpd vsftpd   2590 May 24 07:59 configure
drwxr-xr-x 4 vsftpd vsftpd     72 Jun 23 11:05 contrib
drwxr-xr-x 2 vsftpd vsftpd     40 Jun 23 11:05 html
-rw-r--r-- 1 vsftpd vsftpd   1397 May 24 07:59 LICENSE
drwxr-xr-x 2 vsftpd vsftpd     21 Jun 23 11:05 man
-rw-r--r-- 1 vsftpd vsftpd     49 May 24 07:59 README
drwxr-xr-x 9 vsftpd vsftpd     91 Jun 23 11:05 src

查看当前configure脚本中都支持哪些参数,执行如下命令,可以看到编译安装nginx时我们可以使用的配置选项

# ./configure --help

执行”./configure –help”命令后,你可以看到很多选项信息,此处就不列出这些信息了,最常用的莫过于–prefix选项了,使用–prefix选项可以指定nginx编译安装的目录,除了一些常见的目录设置选项,你应该还会看到好多类似”–with-XXX_module “或” –without-XXX_module”的选项,这些选项是什么意思呢?说到这些选项,又要提到我们刚才介绍的概念了,那就是”模块”的概念,我们已经知道,nginx是高度模块化的,每个模块就代表一个功能,而且刚才也提到过,只有编译安装的方式才能指定安装哪些模块,不安装哪些模块,其实,你可以这样理解,”–with-XXX_module “选项表示指明安装对应的模块,” –without-XXX_module”选项表示指明不安装对应的模块。

换句话说就是:

如果你没有明确使用”–with-AXX_module “选项,那么默认情况下是不会安装”AXX模块”的。

如果你没有明确使用” –without-BXX_module”选项,那么默认情况下是会安装”BXX模块”的。

使用”–with-XXX_module “选项添加默认未加入的模块,使用” –without-XXX_module”选项排除默认会加入的模块。

3.编译安装

# ./configure --prefix=/data/nginx \
--with-file-aio \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module

编译完成显示

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/data/nginx"
  nginx binary file: "/data/nginx/sbin/nginx"
  nginx modules path: "/data/nginx/modules"
  nginx configuration prefix: "/data/nginx/conf"
  nginx configuration file: "/data/nginx/conf/nginx.conf"
  nginx pid file: "/data/nginx/logs/nginx.pid"
  nginx error log file: "/data/nginx/logs/error.log"
  nginx http access log file: "/data/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

上述命令执行完成后,没有错误即可进行编译,执行make命令

# make

完成上述步骤后你可能会发现,解压目录中多了一个objs目录,这个目录是编译安装nginx时产生的中间文件,第一次安装时不用太在意它,如果你以后想要升级老版本的nginx,则会使用到这个目录,此处不用在意,执行如下安装命令

# make install

检查是否安装成功

# /data/nginx/sbin/nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/data/nginx --with-file-aio --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module

# /data/nginx/sbin/nginx 启动nginx

通过浏览器访问IP,如图

nginx默认配置启动成功后,会有两个进程,一个主进程(守护进程),一个工作进程。主进程负责管理工作进程,工作进程负责处理用户的http请求。

# ps -ef | grep nginx
root     27395     1  0 11:18 ?        00:00:00 nginx: master process /data/nginx/sbin/nginx
nobody   27396 27395  0 11:18 ?        00:00:00 nginx: worker process

3.配置nginx开机启动(非必须)

有两种方式,一种是在文件中添加 ‘/data/nginx/sbin/nginx’,另一种是通过supervisor管理nginx进程。

echo '/data/nginx/sbin/nginx' >> /etc/rc.d/rc.local

ll /etc/rc.d/rc.local
-rw-r--r-- 1 root root 554 Aug 31  2019 /etc/rc.d/rc.local
添加可执行权限:
chmod +x /etc/rc.d/rc.local

通过supervisor管理nginx进程,实现开机自动启动,且进程挂掉后自动重启,本篇文字不细讲了,感兴趣可以自己搜索。

4.nginx设置环境变量(非必须)

# nginx -t
-bash: nginx: command not found

# vim /etc/profile
添加:
export PATH="$PATH:/data/nginx/sbin"
保存退出。

#使配置立即生效
source  /etc/profile

测试是否生效

# nginx -t
nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx/conf/nginx.conf test is successful

端口管理

# netstat -tunpl |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27720/nginx: master 
# curl http://127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

即可成功编译安装nginx,下一篇文章再介绍nginx的基本命令和操作。



相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: