Nginx 最简教程~~图文并茂~~

1 关于Nginx

Nginx是轻量级,高性能(响应快,高并发)的Web服务器、反向代理服务器及电子邮件代理服务器。最大支持5万个并发请求的响应。

1.1 为什么要用nginx

一个项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的时候,只需要在服务器的Tomcat中放一个jar包启动应用就够了。
在这里插入图片描述
当平台用户越来越多后,并发量增大,这时候一台服务器无法满足需求。需要添加多台服务器,但是这么多服务器,每次请求该访问哪个呢,我们需要一个中间服务器,将我们的请求帮忙发送到其他几台服务器上面,完成一个请求转发。
在这里插入图片描述

1.2 作用

1.2.1 反向代理

PS: 正向——>主动找代理; 反向——>被动找代理
正向代理
比如目前我们在电脑上玩吃鸡是无法访问国外的服务器的,这时候需要一个VPN代理来访问外网服务器,因为VPN可以帮你请求
在这里插入图片描述

反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现为一个反向代理服务器。
比如要访问baidu.com服务器,用户先访问百度的代理服务器,然后代理服务器再选择对应的服务器进行访问。
在这里插入图片描述

1.2.2 负载均衡

Nginx提供负载均衡策略有两种:内置策略和扩展策略,内置策略为轮询,加权轮询,lp hash。扩展策略就是天马行空,可以实现任何可能。
轮询:一次循环发送请求
在这里插入图片描述
加权轮询:保证服务器性能最大化

在这里插入图片描述
iphash对客户需求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一个服务器进行处理,可以解决session不共享的问题。

在这里插入图片描述

1.2.3 动静分离

在我们的软件开发中,有些请求是需要后台处理的(如css,html,jpg,js等文件),有些请求是不需要经过后台处理的,这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变得资源区分开来,动静资源做好了拆分以后,就可以根据静态资源的特点将其做缓存操作,提高资源响应的速度。

在这里插入图片描述

1.3 安装

1.3.1 Windows下载

下载网站

在cmd中运行nginx.exe,启动nginx

在这里插入图片描述

1.3.2 Linux 安装

2 常用Nginx命令

命令作用
nginx -s stop快速关闭Nginx,不保存相关信息,并终止web服务
nginx -s quit平稳关闭Nginx,保存相关信息,有安排的关闭web服务
nginx -s reload因改变了Nginx相关配置,需要重新加载配置而重载
nginx -c filename为Nginx指定一个配置文件,代替缺省
nginx -t不运行,仅测试配置文件,nginx将检查配置文件的语法正确性,尝试打开配置文件中所引用到的文件
nginx -v显示nginx版本

3 Nginx配置实战

3.1 反向代理配置

  • HTTPS 的固定端口号是 443,不同于 HTTP 的 80 端口
  • SSL 标准需要引入安全证书,所以在 nginx.conf 中你需要指定证书和它对应的 key
  #HTTP服务器
  server {
      #监听443端口。443为知名端口号,主要用于HTTPS协议
      listen       443 ssl;

      #定义使用www.xx.com访问
      server_name  www.helloworld.com;

      #ssl证书文件位置(常见证书文件格式为:crt/pem)
      ssl_certificate      cert.pem;
      #ssl证书key位置
      ssl_certificate_key  cert.key;

      #ssl配置参数(选择性配置)
      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;
      #数字签名,此处使用MD5
      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

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

3.2 负载均衡配置

轮询

upstream bck_testing_01 {
  # 默认所有服务器权重为 1
  server 192.168.250.220:8080
  server 192.168.250.221:8080
  server 192.168.250.222:8080
}

加权轮询

upstream bck_testing_01 {
  server 192.168.250.220:8080   weight=3
  server 192.168.250.221:8080              # default weight=1
  server 192.168.250.222:8080              # default weight=1
}

最少连接

upstream bck_testing_01 {
  least_conn;

  # with default weight for all (weight=1)
  server 192.168.250.220:8080
  server 192.168.250.221:8080
  server 192.168.250.222:8080
}

加权最少连接

upstream bck_testing_01 {
  least_conn;

  server 192.168.250.220:8080   weight=3
  server 192.168.250.221:8080              # default weight=1
  server 192.168.250.222:8080              # default weight=1
}

IP Hash

upstream bck_testing_01 {

  ip_hash;

  # with default weight for all (weight=1)
  server 192.168.250.220:8080
  server 192.168.250.221:8080
  server 192.168.250.222:8080

}

普通Hash

upstream bck_testing_01 {

  hash $request_uri;

  # with default weight for all (weight=1)
  server 192.168.250.220:8080
  server 192.168.250.221:8080
  server 192.168.250.222:8080

}

我们可以启动两个服务程序实例,127.0.0.1:8080,127.0.0.1:8081。
用户去访问通常只会有一个端口,所以会访问一个nginx服务器,实现反向代理和负载均衡。
在这里插入图片描述

3.3 配置两个webapp的负载均衡和反向代理

实现一个http的反向代理,配置nginx.conf文件如下:
nginx配置文件整体结构

events {
	worker_connections 1024;
}

http {
	// 负载均衡配置,#设定实际的服务器列表资源
	upstream xx{
		server 127.0.0.1:8080 weight=1;
		server 127.0.0.1:8081 weight=1;//改变weight值改变权重
	}
	//http 配置
	server {
		listen 80;
		server_name localhost;
		// 代理
		localtion / { // 区分访问的路径,比如有的访问http://ip1,有的访问本地文件
			proxy_pass  http://load_balance_server ;//请求转向load_balance_server 定义的服务器列表
		}
	}
	
	server {
		lisen 443;
		server_name localhost;
		// 代理
		---
	}
}

3.4 网站中有多中webapp的配置

当一个网站功能越来越丰富,会将一些功能相对独立的模块剥离出来,独立维护,这样就会有多个webapp。
比如网站 www.helloworld.com 有金融,产品,用户中心等webapp,访问这些应用的方式通过上下文来进行区分:

www.helloworld.com/finance/

www.helloworld.com/product/

www.helloworld.com/admin/

http 的默认端口号是 80,如果在一台服务器上同时启动这 3 个 webapp 应用,都用 80 端口,肯定是不成的。
所以,这三个应用需要分别绑定不同的端口号。

用户在实际访问 www.helloworld.com 站点时,访问不同 webapp,总不会还带着对应的端口号去访问。
所以,再次需要用到反向代理来做处理。
配置如下:

http {
	#此处省略一些基本配置

	upstream product_server{
		server www.helloworld.com:8081;
	}

	upstream admin_server{
		server www.helloworld.com:8082;
	}

	upstream finance_server{
		server www.helloworld.com:8083;
	}

	server {
		#此处省略一些基本配置
		#默认指向product的server
		location / {
			proxy_pass http://product_server;
		}

		location /product/{
			proxy_pass http://product_server;
		}

		location /admin/ {
			proxy_pass http://admin_server;
		}

		location /finance/ {
			proxy_pass http://finance_server;
		}
	}
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南山二毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值