Nginx学习简记_part1
内容概览
nginx简介
(1)介绍nginx的应用场景和具体可以做什么事情
(2)介绍什么是反向代理
(3)介绍什么是负载均衡
(4)介绍什么是动静分离nginx安装
(1)介绍nginx在linux系统中如何进行安装
nginx常用的命令和配置文件
(1)介绍nginx启动、关闭、重新加载命令
(2)介绍nginx的配置文件nginx配置实例-反向代理
nginx配置实例-负载均衡
nginx配置实例-动静分离
nginx原理与优化参数配置
搭建nginx高可用集群
(1)搭建nginx高可用集群(主从模式)
(2)搭建 nginx高可用集群(双主模式)
第1章:Nginx简介
1.1 Nginx概述
Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
1.2 Nginx作为 webweb 服务器
  Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
https://lnmp.org/nginx.html
1.3 正向代理
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

1.4 反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

1.5 负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

1.6 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

第2章:Nginx安装
2.1 下载Nginx
http://nginx.org/en/download.html ,这里下载的源码包,需要进行编译安装,为了简化安装过程下面我们采用是yum方式安装,这里仅作补充。

2.2 安装Nginx
官方参考文档: http://nginx.org/en/linux_packages.html#RHEL-CentOS
这里选择的在Centos7上通过yum方式来安装。
环境信息如下:
[root@Linux6 ~]# uname -r
3.10.0-957.el7.x86_64
[root@Linux6 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
创建nginx.repo文件
[root@Linux6 ~]# touch /etc/yum.repos.d/nginx.repo
[root@Linux6 ~]# vi /etc/yum.repos.d/nginx.repo
[root@Linux6 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@Linux6 ~]#
安装nginx
[root@Linux6 ~]# yum -y install nginx
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
也可以直接关闭防火墙。
#关闭防火墙
[root@hadoop-104 nginx]# systemctl stop firewalld ;
第3章:常用的命令和配置文件
3.1 Nginx常用命令
(1)启动命令
[root@Linux6 ~]# nginx
#查看进程
[root@Linux6 ~]# ps -ef|grep nginx
root      8172     1  0 03:42 ?        00:00:00 nginx: master process nginx
nginx     8173  8172  0 03:42 ?        00:00:00 nginx: worker process
root      8175  8155  0 03:43 pts/1    00:00:00 grep --color=auto nginx
[root@Linux6 ~]#
(2)关闭命令
[root@Linux6 ~]# nginx -s stop
[root@Linux6 ~]# ps -ef|grep nginx
root      8179  8155  0 03:43 pts/1    00:00:00 grep --color=auto nginx
[root@Linux6 ~]#
(3)重新加载命令
nginx -s reload
3.2 nginx.conf 配置文件
(1)找到安装的nginx
[root@Linux6 ~]# yum list installed | grep nginx
nginx.x86_64                    1:1.16.1-1.el7.ngx             @nginx-stable
[root@Linux6 ~]#
(2)找到“nginx.x86_64”安装包的安装路径
[root@Linux6 ~]# rpm -ql nginx.x86_64
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
查看nginx的配置目录:
[root@Linux6 ~]# ll /etc/nginx/
total 36
drwxr-xr-x. 2 root root   26 Apr 19 03:37 conf.d
-rw-r--r--. 1 root root 1007 Aug 13  2019 fastcgi_params
-rw-r--r--. 1 root root 2837 Aug 13  2019 koi-utf
-rw-r--r--. 1 root root 2223 Aug 13  2019 koi-win
-rw-r--r--. 1 root root 5231 Aug 13  2019 mime.types
lrwxrwxrwx. 1 root root   29 Apr 19 03:37 modules -> ../../usr/lib64/nginx/modules
-rw-r--r--. 1 root root  643 Aug 13  2019 nginx.conf
-rw-r--r--. 1 root root  636 Aug 13  2019 scgi_params
-rw-r--r--. 1 root root  664 Aug 13  2019 uwsgi_params
-rw-r--r--. 1 root root 3610 Aug 13  2019 win-utf
[root@Linux6 ~]#
nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改.
配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的
内容如下
[root@Linux6 ~]# grep -v "^#|^$" /etc/nginx/nginx.conf 
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}
[root@Linux6 ~]#
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分:
第一部分:全局块
  从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
worker_processes  1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events 块
比如上面的配置:
events {
    worker_connections  1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}
这是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块可以分为http 全局块、server 块。
①、http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块
  这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
- 全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。 - 2.location 块
一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。 
Nginx学习简记_part1的更多相关文章
- Nginx学习简记_part2
		
第4章:nginx配置实例 -反向代理 4.1 反向代理实例一 实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080 4.1.1 实验代码 1) ...
 - Nginx学习回顾总结  部分:
		
21:46 2015/11/9Nginx学习回顾总结进程间通信,近似于socket通信的的东西:才发现这种通信并不是很难,并不是我想象的那样很多内容,新领域,入门只是几个函数的使用而已.以前猜过是这样 ...
 - Nginx学习笔记4 源码分析
		
Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ...
 - Nginx学习笔记~目录索引
		
回到占占推荐博客索引 前几天整理了<Docker的学习笔记索引>,受到了很多朋友的关注,今天把Nginx的文章也整理一下,以后将永久更新,像大叔之前的<EF文章系列>,< ...
 - Nginx学习系列二Linux下Nginx实现负载均衡
		
关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...
 - Nginx系列0:Nginx学习历程
		
Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...
 - nginx 学习资料
		
nginx 学习资料 table th:first-of-type { width: 90px; } table th:nth-of-type(2) { } table th:nth-of-type( ...
 - Nginx学习总结
		
2017年2月23日, 星期四 Nginx学习总结 Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单 ...
 - nginx 学习笔记(2) nginx新手入门
		
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
 
随机推荐
- DPDK之什么是imissed、ierrors、rx_nombuf
			
DPDK之什么是imissed.ierrors.rx_nombuf 在采用DPDK进行网络抓包时常常会通过rte_eth_stats_get函数获取当前网卡的丢包状态,首先看一下该函数的声明: // ...
 - java判断当前系统是win还是linux
			
private static final boolean isWin = System.getProperty("os.name").toLowerCase().contains( ...
 - vue学习(九)  使用内联样式设置style样式
			
/html <div id="app"> //对象就是无序键值对的集合 <h1 :style="{ color:red, 'font-weight':2 ...
 - 清晰架构(Clean Architecture)的Go微服务—重大升级
			
去年,我创建了一个清晰架构(Clean Architecture)微服务框架,它功能强大,但有些重.我写了一个系列文章来讲述它,请参阅"清晰架构(Clean Architecture)的Go ...
 - 一个startforresult的例子
			
https://blog.csdn.net/qq_32521313/article/details/52451364
 - DFS与BFS——理解简单搜索(中文伪代码+例题)
			
新的方法和概念,常常比解决问题本身更重要. ————华罗庚 引子 深度优先搜索(Deep First Search) 广度优先搜索(Breath First Search) 当菜鸟们(比如我)初步接触 ...
 - 富文本数据 解析HTML
			
后台返回给前端的富文本数据如: { "status": 1, "info": "获取活动数据成功", "data": [ ...
 - 使用MacOS直播
			
参考链接:https://www.jianshu.com/p/94f42a793a7e 参考链接:https://blog.dreamtobe.cn/live_guideline/ 所需软件 密码: ...
 - PHP similar_text() 函数
			
实例 计算两个字符串的相似度并返回匹配字符的数目: <?php高佣联盟 www.cgewang.comecho similar_text("Hello World",&quo ...
 - [NewLife.Net]单机400万长连接压力测试
			
目标 对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性. [2020年8月1日晚上22点] 先上源码:https://github.com/NewLifeX/N ...