简介
Nginx是高性能Http和反向代理服务器。 Nginx是一个静态的Http服务器,那么就可以处理Http请求,能够对静态资源进行处理,但是不能对动态请求做出处理,因此可以支持的并发是非常高的。 因此利用这一特性,可以利用反向代理实现负载均衡。
- 将静态资源交给Nginx处理
- 动态资源,nginx就利用反向代理、负载均衡来访问真实的服务器
安装
接下来的是在Windows下的安装:
- 点击下面的链接,选择稳定版下载
- 下载完成后,解压,解压后的目录结构
启动
点击nginx.exe启动 或者在命令行下,在此目录下,利用命令启动
nginx
# 或者
start nginx
浏览器访问http://localhost:80
,看到如下页面,代表启动成功
关闭
关闭掉命令行窗口后,Nginx不会关闭,而是继续在后台运行。 命令行,进入Nginx的根目录,就是有nginx.exe的那一层目录。 执行命令
# 正常关闭
nginx -s quit
# 强制退出
nginx -s stop
再次访问http://localhost:80
关闭Nginx成功
静态资源部署
_nginx_每次启动时,都会加载conf/nginx.conf
配置文件,这个配置文件中定义着nginx服务器相关的配置。
打开Nginx根目录下conf/nginx.conf
, 所以,了解了Nginx代理静态资源的原理后。 我们将前端打包后的静态资源,例如html、css、js等文件,可以直接扔在nginx根目录下的html中,并修改
**nginx.conf**
中资源的首页文件 也可以直接在nginx
根目录下,将我们打包后的文件扔在根目录,并修改nginx.conf
中资源目录和首页文件。 例如: 我将打包后的文件夹,直接扔在nginx根目录 修改配置文件
nginx.conf
重启Nginx,访问即可
Nginx常用命令
# 启动nginx
nginx
# 或
start nginx
# 关闭nginx
# 正常退出
nginx -s quit
# 强制推出
nginx -s stop
# 在运行的状态下
# 重启nginx
# 重新加载配置文件
nginx -s reload
多虚拟主机
虚拟主机的意思就是在我们的nginx中部署多个项目,看起来就好像有了多台服务器一样。 在_conf/nginx.conf_配置文件中,是这样的
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80; # 端口
server_name localhost; # 域名或ip
location / {
root dist; # 默认资源的目录
index index.html index.htm; # 默认访问资源名称
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
}
端口绑定
在http节点下,一个server就是一个应用,因此我们可以通过配置多个server来达到配置多虚拟主机的目的
域名绑定
通过不同域名的方式来达到虚拟主机的目的。
反向代理
首先要知道什么是正向代理
正向代理的目标是客户端,帮助客户端来访问服务器
来看反向代理
反向代理的目标是互联网,用户只需要访问nginx,具体访问的是哪个服务器,用户不知道,多目标服务器
如何通过Nginx来实现代理? 在Nginx的conf/nginx.conf
配置文件中,修改 源文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 配置代理
upstream shop-server{
server 127.0.0.1:8080;
}
server {
listen 80; # 端口
server_name 127.0.0.1; # 域名或ip
location / {
# proxy_pass 使用代理
proxy_pass http://shop-server;
index index.html index.htm; # 默认访问资源名称
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
}
这样,反向代理就配置好了,当我们访问nginx时,nginx帮我们去寻找配置好的真实的服务器,服务器响应数据给Nginx,Nginx将数据再响应给客户端,客户端全程是无感的,只与Nginx进行交互。 当被代理的服务器只有一台时,看起来与正向代理差不多。
负载均衡
负载均衡是反向代理的真正目的。 当Tomcat服务器只有一台时,肯定扛不住很高的请求,所以此时可以搭建Tomcat集群,然后利用Nginx来做负载均衡。 我们将Tomcat服务器的地址配置到Nginx中,客户端请求nginx,nginx在所有的Tomcat中挑选一台进行访问,然后将响应结果返回给客户端。 如何在Nginx中配置负载均衡? 刚才配置了反向代理,那么负载均衡就是我们多配几台Tomcat。
负载均衡策略
轮询(默认)
轮着来,挨个挨个分配,Nginx的默认策略。
upstream myserver {
server 192.168.156.156:8080 ;
server 192.168.156.163:8080 ;
server 127.0.0.1:80;
}
server {
listen 80;
server_name 208.208.128.122;
location / {
proxy_pass http://myserver;
index index.html index.htm;
}
权重分配
给某个服务或全部服务配置了权重后,就开了权重策略。 权重越大,被访问的概率越大,只需要在配置文件中,通过weight属性来配置即可。
upstream myserver {
server 192.168.156.156:8080 weight=10; # 在这儿
server 192.168.156.163:8080 weight=5;
server 127.0.0.1:80; # 默认的权重是1
}
server {
listen 80;
server_name 208.208.128.122;
location / {
proxy_pass http://myserver;
index index.html index.htm;
}
服务器之间被访问的概率就是权重之比。 此时各个服务器之间被访问的概率就是10:5:1
ip_hash
通过检查客户端的ip,计算得到一个结果,根据这个结果选择要访问的服务器 这样能保证,一个客户端,最终交互的服务器是同一个
upstream myserver {
ip_hash; # 设置策略
server 192.168.156.156:8080 ;
server 192.168.156.163:8080 ;
server 127.0.0.1:80;
}
server {
listen 80;
server_name 208.208.128.122;
location / {
proxy_pass http://myserver;
index index.html index.htm;
}