nginx详解(持续更新)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

nginx定义

Nginx是轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内各个部门正越来越多使用Nginx取代Apache.

nginx安装

安装nginx需要先安装其依赖组件以及c++环境,最后安装nginx;

组件包含:

• pcre-8.3.7.tar.gz :nginx的http模块使用pcre来解析正则表达式,需要在linux上安装pcre库
• openssl-1.0.1t.tar.gz :安装openssl库,让 nginx 支持 https(即在ssl协议上传输http)
• zlib-1.2.8.tar.gz : nginx使用zlib对http包的内容进行gzip,需要在linux上安装安装zlib库

  1. 组件下载

wget http://nginx.org/download/nginx-1.10.2.tar.gz
wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
2. c++环境安装

yum install gcc-c++
3. 组件安装

openssl安装

tar zxvf openssl-fips-2.0.10.tar.gz
  cd openssl-fips-2.0.10
  ./config && make && make install

pcre安装

tar zxvf pcre-8.40.tar.gz
  cd pcre-8.40
  ./configure && make && make install

zlib安装

tar zxvf zlib-1.2.11.tar.gz
  cd zlib-1.2.11
  ./configure && make && make install
4. nginx安装

tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure && make && make install

nginx目录

  1. linux目录
目录内容
conf存放配置文件
html类似于tomcat的webapps目录,存放网络访问的资源
logs存放日志
sbin存放nginx的启动文件
  1. windows目录

在这里插入图片描述
核心配置文件位置:
在这里插入图片描述

程序相关命令

  1. linux系统

安装完成后的路径为:/usr/local/nginx。nginx位于/usr/local/nginx/sbin,以下命令都是基于这个目录的
(也可以将/usr/local/nginx/sbin添加到环境变量中)

1. 启动服务

 • 普通启动服务:./nginx  
 • 配置文件启动服务:./nginx -c /usr/local/nginx/conf/nginx.conf
2. 停止服务

 • 暴力停止服务:./nginx -s stop  
 • 优雅停止服务:./nginx -s quit
3. 检查与重启服务

 • 检查配置文件:./nginx -t  
 • 重新加载配置:./nginx -s reload
4. 查看相关进程

 • 查看相关进程:ps -ef | grep nginx

服务相关命令

  1. linux系统
#开机自动启动systemctl
systemctl enable nginx

#启动Nginx(x成功后可以直接访问主机IP,会展示Nginx默认页面)
systemctl start nginx

#停止Nginx
systemctl stop nginx

#重启Nginx
systemctl restart nginx

#重新加载Nginx
systemctl reload nginx

#查看Nginx运行状态
systemctl status nginx

虚拟主机(server)

(服务器级别)nginx使用server容器定义一个虚拟主机。server容器没有严格区分基于IP和基于名称的虚拟主机,它们通过listen指令和server_name指令结合起来形成不同的虚拟主机。

# 基于IP地址的虚拟主机
server {
        listen 80;
        server_name 192.168.100.25;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}
server {
        listen 80;
        server_name 192.168.100.26;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

# 基于名称的虚拟主机
server {
        listen 80;
        server_name www.longshuai.com;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}

server {
        listen 80;
        server_name www.xiaofang.com;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

# 基于端口的虚拟主机
server {
        listen 80;
        server_name 192.168.100.25;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}
server {
        listen 8080;
        server_name 192.168.100.25;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

路由匹配(location)

->点击查看nginx实例

(请求级别)nginx根据用户请求的URI对应至server模块,然后依靠location块的匹配规则,选择进入对应location块进行处理。

修饰符匹配规则如下:

在这里插入图片描述

它们之间匹配优先级:精确匹配>左侧通配符匹配>右侧通配符匹配>正则表达式匹配

进入对应的location块后再通过root指令和index指令结合起来配置被访问的首页即可

指令内容
root配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
index配置首页文件的名称

写法如下:

location / {
    root html; 
    index index.html index.htm; 

}

正向代理

正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。

在这里插入图片描述

反向代理

->点击查看nginx实例

以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端

举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com。那么这个时候我们就可以通过nginx去实现。

在这里插入图片描述

nginx负载均衡

->点击查看nginx实例

  1. 负载均衡

我们项目部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,减轻了各服务器的压力。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种:

负载种类成本内容
硬件负载造价昂贵成本较高数据的稳定性安全性等等有非常好的保障
软件负载均衡利用现有的技术结合主机硬件实现的一种消息队列分发机制
  1. 负载均衡策略

请求数量按照负载均衡策略进行分发到不同的服务器

负载均衡策略

->点击查看nginx实例

  1. 轮询策略(默认)

每个请求按时间顺序,逐一分配到不同的后端服务器,这是默认的负载均衡策略。如果后端服务器down掉,能自动剔除。

#动态服务器组
upstream bobo{
	server 192.168.64.1:9001; #tomcat 1
	server 192.168.64.1:9002; #tomcat 2
	server 192.168.64.1:9003; #tomcat 3
	server 192.168.64.1:9004; #tomcat 4
}


location ~ .jps$ {
	proxy_pass http://bobo
	
}


轮询策略可以给不同的后端服务器设置一个权重值(weight),所谓权重就是按照比例来进行分配,如果有三次请求,2次在第一个机器上,1次在另外一个机器上。
权重大小和访问比率成正比,该策略常用于后端服务器性能不均衡的情况下。

#动态服务器组
upstream dynamicserver {
	server 192.168.64.1:9001  weight=2;                    #tomcat 1
	server 192.168.64.1:9002;                              #tomcat 2
	server 192.168.64.1:9003;                              #tomcat 3
	server 192.168.64.1:9004;                              #tomcat 4
}


  1. ip_hash策略

(nginx版本1.3.1之前不能在ip_hash中使用权重)
对每个请求访问的ip进行hash运算,再根据结果进行分配,这样每个访客固定访问一个后端服务器。
这也在一定程度上解决了集群部署环境下session共享的问题。
当有服务器需要剔除,必须手动down掉。

upstream dynamicserver {
	ip_hash;  #保证每个访客固定访问一个后端服务器
	server 192.168.64.1:9001  weight=2;                   #tomcat 1
	server 192.168.64.1:9002;                             #tomcat 2
	server 192.168.64.1:9003;                             #tomcat 3
	server 192.168.64.1:9004;                             #tomcat 4
}

  1. fair

智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
4. url_hash

按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,反向代理了多台真实的业务处理服务器。

动静分离

->点击查看nginx实例

在说动静分离前,我们要知道为何要做动静分离以及他能解决啥问题,首先,我们常见的web系统中会有大量的静态资源文件比如掘金主页面刷新后的f12如下:

在这里插入图片描述

可以看到有很多静态资源,如果将这些资源都搞到后端服务的话,将会提高后端服务的压力且占用带宽增加了系统负载(要知道,静态资源的访问频率其实蛮高的)所以为了避免该类问题我们可以把不常修改的静态资源文件放到nginx的静态资源目录中去,这样在访问静态资源时直接读取nginx服务器本地文件目录之后返回,这样就大大减少了后端服务的压力同时也加快了静态资源的访问速度,何为静,何为动呢?

• 静: 将不常修改且访问频繁的静态文件,放到nginx本地静态目录(当然也可以搞个静态资源服务器专门存放所有静态文件)
• 动: 将变动频繁/实时性较高的比如后端接口,实时转发到对应的后台服务

接下来我们将构造一个html页面,然后点击按钮后发送get请求到后端接口,流程如下:

在这里插入图片描述

server {
	listen 9000;
	server_name localhost;
	
	location ~\*.(jps|js|css|html|png|gif|map)$ {
		root /usr/local/web;
		expires 1d;
	
	}

	location ~.action$ {
		proxy_pass http:1.117.75.21:8080;
	
	}
	
}

跨域

->点击查看nginx实例

  1. 同源策略

由于同源策略的原因产生了跨域问题,同源策略目的是为了保护用户信息安全,防止恶意网站窃取数据,目前所有浏览器都实现同源策略。

同源策略主要是指三点相同即:协议 、域名、端口,这三点相同的两个请求则可以看作是同源的,如果其中任意一点不同,则代表两个不同源的请求,此时同源策略会限制不同源之间的资源交互。
2. 场景

web 领域开发中,经常采用前后端分离模式。这种模式下,前端和后端分别是独立的 web 应用程序,例如:后端是 Java 程序,前端是 React 或 Vue 应用。各自独立的 web app 在互相访问时,势必存在跨域问题。
3. 解决跨域

避免不同源可以解决跨域,将后端的代理放在前端的server(即统一使用一个端口),因为server支持多个location配置

https配置

  1. 前置条件

• 服务器已经安装nginx并且通过http可以正常访问
• 拥有ssl证书,没有的可以去阿里购买或者免费申请一年
2. ssl模块安装

一般情况下自己安装的nginx都是不存在ssl模块的

1. 检查是否存在ssl模块

 进行Nginx安装目录的sbin目录下,输入:./nginx -V

 如果出现 (configure arguments: --with-http\_ssl\_module), 则已安装
  1. 配置ssl证书

解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)

将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹
4. 配置nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
  server {
  	#监听443端口
    listen 443;
    #你的域名
    server_name huiblog.top; 
    ssl on;
    #ssl证书的pem文件路径
    ssl_certificate  /root/card/huiblog.top.pem;
    #ssl证书的key文件路径
    ssl_certificate_key /root/card/huiblog.top.key;
    location / {
     	proxy_pass  http://公网地址:项目端口号;
    }
  }
  server {
    listen 80;
    server_name huiblog.top;
    #将请求转成https
    rewrite ^(.*)$ https://$host$1 permanent;
  }
}


nginx优化

  1. 安全优化(提升网站安全性配置)
  2. 性能优化(提升用户访问网站效率)

nginx实例

一些对安全性要求比较高的站点,可能会使用 HTTPS(一种使用ssl通信标准的安全HTTP协议),使用 nginx 配置 https 需要知道几点:
• HTTPS 的固定端口号是 443,不同于 HTTP 的 80 端口
• SSL 标准需要引入安全证书,所以在 nginx.conf 中你需要指定证书和它对应的 key

->模仿多个主机

->location匹配

->反向代理

->负载均衡

->动静分离

->跨域

  1. 模仿多个主机

• (Linux服务器)修改nginx配置文件如下,并重启
在这里插入图片描述
• (客户机)修改hosts文件

192.168.64.150 www.abc.com
192.168.64.150 www.bbs.com

  1. location匹配

    1. 前缀匹配

    • 没有修饰符,修改配置文件如下,并重启nginx

    server {
        listen       80;
        server_name www.tangbb.com;
        location /abc {
            default_type text/html;
            echo "abc...";
    
    
    

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ginx

```
server {
    listen       80;
    server_name www.tangbb.com;
    location /abc {
        default_type text/html;
        echo "abc...";

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

[外链图片转存中…(img-9sK5H5BN-1715851447578)]

给大家整理的电子书资料:

[外链图片转存中…(img-KzEbDZcu-1715851447578)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值