Nginx知识汇总
创始人
2024-01-29 00:17:30
0

一、Nginx的简介

nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。

二、Nginx的优点

  1. 跨平台、配置简单;
  2. 采用单线程来异步非阻塞处理请求、避免多线程CPU 的上下文切换带来的损耗;
  3. 内存消耗小,支持高并发连接;
  4. 成本低廉,且开源;
  5. 稳定性高,宕机的概率非常小;

三、Nginx的安装

  1. 使用docker拉取nginx镜像;
docker pull nginx
  1. 查看拉取的nginx镜像信息
docker images nginx
  1. 创建nginx的配置文件的挂载目录,通过docker启动的nginx容器,nginx的配置文件是存在容器中的/etc/nginx目录下,如果想要修改nginx的配置文件的话就需要先进入到容器内,再找到其目录下的配置文件进行修改。如果是修改比较频繁的话,每次都要进入容器内进行修改还是挺麻烦的,现在在容器启动前在主机上创建nginx配置文件挂载的目录,后面启动的时候直接将容器内的配置文件挂载到主机上,后续修好nginx的配置文件就直接在挂载到主机的目录下修改就好。
# 创建挂载目录
mkdir -p /usr/local/src/nginx/conf
mkdir -p /usr/local/src/nginx/log
mkdir -p /usr/local/src/nginx/html
  1. 创建并启动nginx容器,将容器中的相应文件copy到刚创建的挂载目录中,复制完成再停止并删除该容器
// 启动容器
docker run --name myNginx -d -p 80:80  nginx:latest# 将容器nginx.conf文件复制到宿主机
docker cp 008aee5bc129:/etc/nginx/nginx.conf /usr/local/src/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp 008aee5bc129:/etc/nginx/conf.d /usr/local/src/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp 008aee5bc129:/usr/share/nginx/html /usr/local/src/nginx// 停止容器
docker stop 008aee5bc129
// 删除容器
docker rm 008aee5bc129
注:008aee5bc129为容器id
  1. 重新启动容器并设置挂载目录
docker run \
-p 80:80 \
--name myNginx \
-v /usr/local/src/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/src/nginx/log:/var/log/nginx \
-v /usr/local/src/nginx/html:/usr/share/nginx/html \
-d nginx:latest

四、Nginx配置文件(nginx.conf)

默认在Linux上安装的Nginx,配置文件在安装的nginx目录下的conf目录下,名字叫做nginx.conf。ginx.conf主要由三部分组成:全局块、events块、http块。

----------------------- 全局块 ------------------------------# 全局配置
# user nobody nobody;
worker_processes 2;
# error_log logs/error.log
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid
worker_rlimit_nofile 1024;
-------------------------------------------------------------
************************events块*****************************# nginx工作模式配置
events {                           worker_connections 1024;multi_accept on;use epoll;
}
*************************************************************
==========================http块=============================# http设置
http {                                # http全局块....# server块server {         # server全局块               ....# location块location {                   ....}# location块location path {....}# location块location otherpath {....}}# server块server {....location {....}}# upstream块upstream name {                   ....}
}
===============================================================
  1. 全局块:用于进行nginx全局信息的配置,常用配置项有如下:
    (1)user:用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行;
    (2)worker_processes:指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍;
    (3)error_log:定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】;
    (4)pid:用来指定进程id的存储文件的位置;
    (5)worker_rlimit_nofile:用于指定一个进程可以打开最多文件数量的描述;
  2. events块:用于nginx工作模式的配置,常用配置项有如下:
    (1)worker_connections:指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的;
    (2)multi_accept:配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接;
    (3)use epoll:配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue;‘’
  3. http块:包括http全局块,以及多个server块。作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可。
    3.1、http全局块:http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
    3.2、server块:用来定义一个虚拟访问主机,也就是一个虚拟服务器的配置信息。每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。
    3.2.1、全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
    3.2.2、location 块:一个 server 块可以配置多个 location 块,主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理。在路由访问信息配置中关联到反向代理、负载均衡等等各项功能。
    在这里插入图片描述
# 优先级1,精确匹配,根路径
location =/ {proxy_pass http://192.168.80.102:8080;
}# 优先级2,以某个字符串开头,以test开头的,优先匹配这里,区分大小写
# http://test.com/test/test1.html
location ^~ /test{root /data/; # 匹配成功,实际访问路径为:/data/test/test1.htmlindex index.php index.html;
}# 优先级3,区分大小写的正则匹配,匹配/image*****路径
# http://test.com/image/image1.html
location ~ /image{alias /data/static/;  # 匹配成功,实际访问路径为:/data/static/image1.htmlindex index.php index.html;
}# 优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {root  /data/image/;index index.php index.html;
}# 优先7,通用匹配
location / {return 403;
}location:后面跟的是请求地址路径匹配规则;
proxy_pass:设置反向代理的路径,匹配成功后跳转到该指定的路径;
root:用于指定访问虚拟主机的目录,实际访问文件路径会拼接URL中的路径;
alias:用于指定访问虚拟主机的目录,实际访问文件路径不会拼接URL中的路径;
index:在不指定访问具体资源时,默认展示的资源文件列表;

3.2.3、upstream块:主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器。

upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
ip_hash:指定的负载均衡调度算法是ip_hash;
server host:port:分发服务器的列表配置;
-- down:表示该主机暂停服务;
-- max_fails:表示失败最大次数,超过失败最大次数暂停服务;
-- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求

五、正向代理与反向代理

  1. 正向代理:代理的是客户端,需要在客户端配置代理服务器,再将要访问的真实的服务器地址交给代理服务器,由代理服务器去请求这个真实的服务器的地址,拿到对应的数据后再返回给客户端。
    在这里插入图片描述
  2. 反向代理:代理的是服务器端,客户端不需要任何配置,客户端只需要将请求发送给反向代理服务器即可,代理服务器将请求分发给真实的服务器,获取数据后将数据转发给客户端。隐藏了真实服务器,有点像网关。
    在这里插入图片描述

六、负载均衡

主要运用在分布式场景,客户端的所有请求都将会先到nginx上,再由nginx根据相应的规则,将这些请求按时间顺序逐一分配到不同的后端服务器上处理。nginx负载均衡的实现规则有以下5种:

  1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
upstream myserver { server 192.168.1.11:8081; server 192.168.1.12:8082; 
} 
  1. weight权重:默认为 1,权重越高被分配的客户端越多。
upstream myserver { server 192.168.1.11:8081 weight=2; server 192.168.1.12:8082 weight=8; 
} 
  1. ip_hash( IP绑定):每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
upstream myserver { ip_hash; server 192.168.1.11:8081; server 192.168.1.12:8082; 
} 
  1. fair(第三方插件):必须安装upstream_fair模块,对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
upstream myserver { server 192.168.80.102:8081;server 192.168.80.102:8082;fair;
} 
  1. url_hash(第三方插件):必须安装Nginx的hash软件包,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
upstream myserver { server 192.168.80.102:8081;server 192.168.80.102:8082;hash $request_uri; hash_method crc32; 
} 

七、动静分离

将静态资源 css、html、js等和动态资源(jsp servlet)进行分开部署,我们可以将静态资源直接部署在专门的服务器上,也可以直接放在反向代理服务器上(Nginx)所在在的服务器上,动态资源还是部署在真实的服务器上。然后请求来的时候,静态资源从专门的静态资源服务器获取,动态资源还是转发到后端服务器上。可以提高用户访问静态资源的响应速度,降低对后台服务的访问频率。
在这里插入图片描述

相关内容

热门资讯

2018年 2018年年度报告... 2粗粮早餐现代人越来越注意饮食健康,小本生意你可以从粗粮早餐下手。像玉米棒、烤红薯、煎饼、烧麦包子、...
最适小本生意创业的项目合年轻人... 个性化小礼品这种风靡欧美的个人图片保存新模式,已经从欧美展开,于去年9月份,个性化小礼品悄然进军中国...
2018适合在农乡镇小本创业致... 农村乡镇创业项目:科技书店现在的农村大都搞多种经营,农民们也广寻致富门路。通俗易懂的农村科技致富书籍...
乡镇小本创业致富项目 乡镇小本... 做什么小生意比较好赚钱?如今市面上的小本创业项目如雨后春笋般快速发展,如果你真的想要做点小生意赚钱。...
2017年农村致富金点子 20... 县城虽小却是一个地区的经济中心,周边生活的老百姓都要通过县城满足自己的日常生活需求。2017年被称为...
农村六个创业项目 最适合农村的... 洗一套衣服只需2元左右的成本,收费10元,翻新、清洗一件皮衣成本1-2元,收50-80元,日收活在5...
亳州炒货机小本创业首选项目 亳... 炒货机亳州炒货机,宿州炒货机小本创业首选项目致诚机械板栗机厂专业生产、批发、供应、销售各款炒板栗机器...
市场空亳州炒货机小本创业首选项... 创业俨然成为了当今社会致富的主要途径,而创业的风险又是让很多投资者忌惮。为了降低风险又不至于错过这个...
成都女人做什么创业项目比较好推... 成都女人做什么创业项目比较好推荐对于一个普通创业者来说,在选择项目的时候,一定要考虑自己的兴趣所在。...
创业小本项目有哪些 创业小本项... 2019小本创业项目有哪些呢?创业首先就是要确定一个好的创业项目,有了好的创业项目创业就会事半功倍,...