nginx 入门及 demo

本文文字部分主要转自以下三篇文章。demo 为自己实现。
参考:https://www.cnblogs.com/FondWang/p/11666557.html
参考:https://www.cnblogs.com/wcwnina/p/8728391.html
参考:https://blog.csdn.net/qq_36125138/article/details/84144932

linux 下安装 nginx

  • 下载
    wget http://nginx.org/download/nginx-1.13.7.tar.gz
  • 安装
    安装以下内容
    yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
    
    解压 nginx-1.13.7.tar.gz 到 /root/nginx/nginx-1.13.7
   
    进入 /root/nginx/nginx-1.13.7
    执行 ./configure
    执行 make
    执行 make install

   执行完上述命令后,nginx 被安装在 /usr/local/nginx
   [root@shicai nginx]# ls /usr/local/nginx
   conf  html  logs  sbin
  • 启动 nginx
  cd /usr/local/nginx/sbin
  ./nginx
  • 测试
$ curl 47.114.2.22:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
  • 停止
/usr/local/nginx/sbin/nginx -s stop
  • 重启
/usr/local/nginx/sbin/nginx -s reload

nginx 是什么

  • 同 Apache 一样都是一种 WEB 服务器
  • 基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过 HTTP 协议提供各种网络服务。
  • 跨平台,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上

nginx 能做什么

  • 正向代理
  • 反向代理
  • 负载均衡
  • HTTP服务器(动静分离)

正向代理

  • 客户端明确要访问的服务器地址
  • 服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端
  • 隐藏了真实客户端信息
  • 客户端需设置:正向代理服务器的IP地址,和代理程序的端口
  • 总之:“它代理的是客户端,代客户端发出请求”
    在这里插入图片描述

正向代理的用途:

  • 访问原来无法访问的资源,如Google
  • 可以做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

  • 客户端是明确的
  • 请求具体由哪台服务器处理的不明确
  • 反向代理服务器接收请求后,按照一定的规则分发给后端服务器
  • 客户端不知道代理服务器存在
  • 总之:“它代理的是服务端,代服务端接收请求”
    在这里插入图片描述

反向代理的作用:

  • 保证内网的安全,通常将反向代理作为公网访问地址
  • 负载均衡

demo

  • 启动被代理的后台服务
安装 java 
rpm -ivh jdk9.rpm

启动两个后台进程,是两个 spring-boot demo 工程,
java -jar dockerdemo-1.jar &
java -jar dockerdemo-2.jar &

验证启动成功
[root@shicai ~]# curl 127.0.0.1:9090/hello
Hello Spring Boot!
[root@shicai ~]# curl 127.0.0.1:9091/hello
Another Hello Spring Boot!
  • 设置反向代理并启动 nginx

修改 /usr/local/nginx/conf/nginx.conf 完整内容为

events {
    worker_connections  1024;
}

http {
    #设置反向代理
    #注意,这里必须写成 nginx.demo,而不能写成 nginx_demo,否则会出现 HTTP Status 400 – Bad Request
    upstream nginx.demo{
        #设置负载均衡
        server 127.0.0.1:9090 weight=5;
        server 127.0.0.1:9091 weight=1;
    }

    #要代理的服务器信息
    server {
        listen       80;
        location / {
            #设置代理
            proxy_pass http://nginx.demo;
        }
    }
}
  • 测试
    可见因为设置了权重,导向 127.0.0.1:9090 的请求明显更多。
[root@shicai conf] # curl 127.0.0.1:80/hello
Hello Spring Boot!
[root@shicai conf]# curl 127.0.0.1:80/hello
Hello Spring Boot!
[root@shicai conf]# curl 127.0.0.1:80/hello
Hello Spring Boot!
[root@shicai conf]# curl 127.0.0.1:80/hello
Hello Spring Boot!
[root@shicai conf]# curl 127.0.0.1:80/hello
Another Hello Spring Boot!

正向代理与反向代理区别

在这里插入图片描述

  • 正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息
  • 反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息
  • Proxy在两种代理中做的事情都是替服务器代为收发请求和响应

负载均衡

  • 轮询
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除

  • 权重轮询
    指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况

  • ip_hash
    上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

  • fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  • url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

HTTP服务器

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。

demo

修改 /usr/local/nginx/conf/nginx.conf 完整内容为

# 需要配置 user,否则会因为权限问题,访问 403,参考 https://www.jianshu.com/p/96632440a668
user root;

events {
    worker_connections  1024;
}

http {
    server {
        listen       80;
        server_name  127.0.0.1;

        location / {
            root /root/download_files;
            index index.html;
        }
    }
}
  • 测试
[root@shicai ~]# curl 127.0.0.1:80/hello.html
2
[root@shicai ~]# curl 127.0.0.1:80
1

$ curl http://47.114.2.22:80/hello.html
2

其中 index.html 的内容是 "1",hello.html 的内容是 "2"

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

这样我们就可以吧HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。

demo

修改 /usr/local/nginx/conf/nginx.conf 完整内容为

user root;

events {
    worker_connections  1024;
}

http {
    upstream dynamic.server {
        server 127.0.0.1:9090 weight=5;
        server 127.0.0.1:9091 weight=1;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://dynamic.server;
        }

        location ~ .*\.(html|gif|jpg|png|bmp|swf|jpeg)$ {
            root /root/download_files;
        }
    }
}
  • 测试
[root@shicai ~]# curl 127.0.0.1:80/hello
Hello Spring Boot!
[root@shicai ~]# curl 127.0.0.1:80/hello.html
2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一个高性能的开源Web服务器软件,它可以作为反向代理服务器、负载均衡器和HTTP缓存服务器等多种用途。对于初学者,可以通过阅读《nginx 快速入门》这本PDF来学习nginx的基本知识和使用方法。 《nginx 快速入门》这本PDF提供了全面而详细的关于nginx的介绍和使用指南。首先,它简要介绍了nginx的历史、特点和优势,帮助读者对nginx有一个整体的了解。然后,它详细介绍了nginx的安装和配置过程,包括如何在不同操作系统上安装nginx、如何配置nginx的基本选项和参数等。 除了安装和配置,这本PDF还介绍了nginx的核心功能和常用模块的使用方法。例如,它详细介绍了如何配置nginx作为反向代理服务器,将客户端的请求转发到后端的应用服务器;如何配置nginx作为负载均衡器,实现请求的分发和负载均衡;以及如何配置nginx作为HTTP缓存服务器,提高Web应用的性能等。 此外,这本PDF还介绍了nginx的安全性和高可用性相关的内容,例如如何配置SSL证书进行HTTPS加密传输、如何配置基于HTTP Basic Authentication的访问控制、如何配置nginx实现故障转移和负载均衡等。 总之,《nginx 快速入门》这本PDF是一本适合初学者快速入门nginx的指南。通过阅读这本PDF,读者可以了解nginx的基本概念和使用方法,并能够配置和管理一个基本的nginx服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值