Nginx学习笔记

桌桌 2022-8-12 68 8/12

学习视频来自狂神说【狂神说】Nginx最新教程

1 Nginx简介

客户端较少的情况下,仅仅使用tomcat就可以满足需求

当客户端访问量猛增的时候,一台服务器就无法满足要求,于是我们可以横向扩展服务器的数量,用更多的服务器来满足更大的需求,但是由于session是不可以共享的,当客户访问的时候必须是同一个服务器,不然就会乱套。于是我们需要一个代理的服务器,来帮我们实现将用户的访问特定的关联到某个服务器中,同时还可以按照我们服务器负载能力的不同进行分配,即完成负载均衡的任务。

于是我们在客户端和服务器中加了一个服务器,来实现反向呆立和负载均衡,也就是Nginx

没有什么是加一层解决不了的问题!

Nginx学习笔记

为什么使用Nginx,或者说有什么特点:

1 占用内存空间少,大小约为1M。

2 并发能力强,可以达到50000个并发连接相应。

3 安装简单,配置文件简洁,Bug非常少,启动非常容易,几乎可以做到7*24小时不间断运行。

2 Nginx作用

http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

正向代理,代理客户端的

Nginx学习笔记

反向代理,代理服务器的


正向代理的作用:

  • 科学上网:当前用户不能直接访问某个服务器A时,通过将请求发给某个可以连接服务器A的代理服务器,然后由代理服务器去访问服务器A,最后代理服务器再将结果返回给用户。

  • 加速访问:电信用户访问联通服务器时,速度会变得很慢,如果有同事支持联通和电信的代理服务器,那么用户就可以先访问代理服务器,代理服务器再去访问联通服务器,速度较快(加速器的原理)。

  • 缓存数据:将可能被多次访问的数据按照一定的策略存放于代理服务器中,以后用户访问请求资源时不必每次都去请求服务器。

  • 授权访问:对访问者进行身份验证,进行访问控制。

  • 隐藏访问者:用户访问某服务器A时不希望A能够知道用户本人的身份,使用代理服务器进行访问。

反向代理的作用:

  • 保护服务器:只能使用代理服务器来访问某服务器A,用户则不能直接向服务器发送操作请求。

  • 负载均衡:对用户的访问请求分发到多个服务器中。

简要对比:

正向代理:代理的是客户端,对客户端负责

反向代理:代理的是服务端,对服务端负责

3 负载均衡理解

希望能够让请求按照服务器的负载能力进行分配

方案1:轮询

按照请求到达顺序,给服务器排序后,每个服务器分发一个客户端请求

方案2:加权轮询

按照请求来的顺序,按照服务器的权重,给不同的服务器分配不同数量的请求

方案3:iphash,对客户端请求的IP进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

但是如果这台服务器出现了问题,那么保存的信息就全部丢失了,而且性能不是很好,因此不建议使用的Nginx来实现session共享,而是使用redis实现

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

Nginx的作用:反向代理、负载均衡、动静分离

4 Nginx的安装

windows在官网下载即可nginx: download下载Windows版本的,安装后在解压后目录下运行nginx.exe

Nginx学习笔记

在nginx.conf文件中可以看到监听的端口默认为80

于是查看一下

Nginx学习笔记

linux安装文件可以在官网下载linux版本,解压后在configure所在目录下

./ configure        # 配置configure文件

make

make install

接下来启动nginx,并查看相关配置

[root@VM-4-12-centos ~]# whereis nginx
nginx: /usr/local/nginx
[root@VM-4-12-centos ~]# cd /usr/local/nginx/
[root@VM-4-12-centos nginx]# ll
total 16
drwxr-xr-x 2 root root 4096 Aug 10 18:09 conf
drwxr-xr-x 2 root root 4096 Aug 10 18:09 html
drwxr-xr-x 2 root root 4096 Aug 10 18:09 logs
drwxr-xr-x 2 root root 4096 Aug 10 18:09 sbin
# 到sbin目录下启动nginx
[root@VM-4-12-centos nginx]# cd sbin
[root@VM-4-12-centos sbin]# ll
total 3816
-rwxr-xr-x 1 root root 3904512 Aug 10 18:09 nginx
[root@VM-4-12-centos sbin]# ./nginx 
[root@VM-4-12-centos sbin]# cd ..
[root@VM-4-12-centos nginx]# cd conf/
[root@VM-4-12-centos conf]# ll
total 68
...
-rw-r--r-- 1 root root 2656 Aug 10 18:09 nginx.conf
-rw-r--r-- 1 root root 2656 Aug 10 18:09 nginx.conf.default
...
# 查看配置文件,80端口
[root@VM-4-12-centos conf]# cat nginx.conf
...
    server {
        listen       80;
        server_name  localhost;
...

使用服务器公网ip访问,nginx正常运行

Nginx学习笔记

5 Nginx常用命令

cd /usr/local/nginx/
./nginx             # 启动
./nginx -s stop     # 停止
./nginx -s quit     # 安全退出
./nginx -s reload   # 重新加载配置文件
ps aux|grep nginx   # 查看nginx进程

6 nginx使用方法

[root@VM-4-12-centos conf]# cat nginx.conf

# 这里是全局配置
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# 这里是最大连接数
events {
    worker_connections  1024;
}

# http配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    # 桌桌名字可以任意定义,这里的作用是为了给server中的代理所使用,weight是负载均衡中的权重,如果有多个服务器则按以下形式。
    upstream zhuozhuo {
        server 120.xxx...:... weight=1;
        server 121.xxx...:... weight=1;
    }

    # 假如进入wangyuanzhuo.top,默认进入
    server {
        listen       80;
        server_name  localhost;
        //代理

        # 例如80端口默认进入这个
        location / {
            # 此处写服务器的ip地址,例如120.xxx...
            # 以下是代理,访问配置nginx的服务器的80端口,会到达upstream配置的服务器中
            proxy_pass http://wangyuanzhuo.top
        }
        
        #想让/admin下的请求进入另一台服务器
        location / admin{
            # 此处写服务器的ip地址,例如121.xxx...
        }
        ...
}

实践测试

在本机安装了nginx之后,尝试使用本机的nginx代理到我的博客中,

ps:由于博客内容仅配置有一个服务器,只能验证反向代理而不能验证负载均衡的作用,这里就不再多做验证了嘿嘿。

在本机装的nginx中的conf修改部分如下:

upstream zhuozhuo {
        server 47.100.172.216:80 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://wangyuanzhuo.top;
        }

结果:访问127.0.0.1:80时到达

Nginx学习笔记

如果有多个服务器,权重就是此前的加权轮询,例如

第一个服务器的权重weight=1

第二个服务器的权重weight=3

那么四次访问中,有3个请求回到第2个服务器中,有1个会到第一个服务器中。

而对于用户来说,这个过程是无感知的。

以上就是简单的nginx学习,复杂的nginx配置可以参考Nginx 配置详解 | 菜鸟教程 (runoob.com)

- THE END -

桌桌

8月12日22:30

最后修改:2022年8月12日
0

非特殊说明,本博所有文章均为博主原创。