Nginx入门(超级无敌认真好用,万字收藏篇!!!!)

Nginx入门

1 Nginx概述

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务 ;
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。;
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
  • 中国大陆使用 Nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。
  • Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

2 Nginx相关技术

2.1 正向代理

正向代理,意思是一个位于客户端和原始服务器(origin)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

  • 简单来说:就是客户端通过一个代理服务器来访问后台服务器

在这里插入图片描述

2.2 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

  • PS:当大量客户端同时访问服务端时,一个服务端服务器承受不住大量客户端请求,我们就会设置集群,设置一个代理服务器,代理服务器集群(该服务器不做具体功能)只向集群发送客户端传来的请求,并响应集群中某一个服务器的服务。

反向代理隐藏了真实服务器IP地址,暴露了代理服务器地址

在这里插入图片描述

2.3 负载均衡

Nginx提供的负载均衡策略

①轮询策略

②按权轮询策略

③IPHash

  • ip_hash是根据用户请求过来的ip,然后映射成hash值,然后分配到一个特定的服务器里面;
  • 使用ip_hash这种负载均衡以后,可以保证用户的每一次会话都只会发送到同一台特定的Tomcat里面,它的session不会跨到其他的tomcat里面去的;
  • 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

2.4 动静分离

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

3 Nginx的简单使用

3.1 安装Nginx

① 进入官网下载

http://nginx.org/

② 解压压缩包

在这里插入图片描述

3.2 Nginx配置文件

Nginx.conf

# 内核数
worker_processes  1;
# 事件监听
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }        
    }
}

配置文件由三部分组成

① 全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

② events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

③ http全局块

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server 块

    这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
    每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
    而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。

    • location 块

      这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

3.3 做一个代理

3.3.1 绑定域名和IP

C:\Windows\System32\drivers\etchosts文件

  • 增加如下配置
127.0.0.1       huozhexiao.com #将域名和ip绑定

3.3.2 在nginx目录下启动nginx

E:\Nginx\nginx-1.23.4>nginx

3.3.3 浏览器输入localhost

成功进入nginx页面

3.3.4 关闭Nginx

输入nginx命令nginx -s stop(快速停止)或nginx -s quit(完整有序的停止nginx)

3.3.5 配置nginx.conf

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
            #指定要代理的服务器
			proxy_pass http://www.baidu.com;
	        }       
	        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }        
    }

3.3.6 访问www.huozhexiao.com

进入www.baidu.com

3.4 做一个负载均衡

3.3.1 创建一个SpringBoot项目并写Controller

@RestController
@RequestMapping("/nginx")
public class NginxController {
    
    
    @Value("${server.port}")
    private Integer port;
    @RequestMapping("/demo")
    public String demo(){
    
    
        return "nginx_demo--------->:"+port;
    }
}
  • application.yml分别修改端口号

  • 并行运行三个端口的项目

3.3.2 配置nginx.conf

  • 配置upstream,在http里
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    #设置负载均衡服务器
	upstream huozhexiao.com{
		server 127.0.0.1:8081 weight=1;
		server 127.0.0.1:8082 weight=2;
		server 127.0.0.1:8083 weight=3;
	}
		

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
			 #指定要代理的服务器
			#proxy_pass http://www.baidu.com;
			proxy_pass http://huozhexiao.com;
	        }       
   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }        
    }

浏览器输入:http://huozhexiao.com/nginx/demo

按相应权重轮询策略进入三个端口号

3.5 另外一个模块配置负载均衡

3.5.1 新建一个Controller

@RestController
@RequestMapping("/admin/nginx")
public class NginxAdminController {
    
    
    @Value("${server.port}")
    private Integer port;
    @RequestMapping("/demo")
    public String demo(){
    
    
        return "nginx_admin_demo--------->:"+port;
    }
}

3.5.2 新增配置

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	
	
    #设置负载均衡服务器
	upstream huozhexiao.com{
		server 127.0.0.1:8081 weight=1;
		server 127.0.0.1:8082 weight=2;
		server 127.0.0.1:8083 weight=3;
	}
	 #设置admin负载均衡服务器
	upstream admin.com{
		server 127.0.0.1:8084 weight=1;
		server 127.0.0.1:8085 weight=2;
		server 127.0.0.1:8086 weight=3; 
	}

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
			 #指定要代理的服务器
			#proxy_pass http://www.baidu.com;
			proxy_pass http://huozhexiao.com;
	        }       
			
		location /admin {
			proxy_pass http://admin.com;
	        }   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }        
    }
 }   

浏览器输入http://huozhexiao.com/admin/nginx/demo

按相应权重轮询策略进入三个端口号


PS:相关命令

开启:nginx

关闭: nginx -s stop

重启: nginx -s reload


  • 学习来自于加中实训

猜你喜欢

转载自blog.csdn.net/woschengxuyuan/article/details/130210195