nginx之静态资源访问和负载均衡的使用!

1、前言

最近空闲时间稍微少了点,晚上下班通常会看会书,因此更新也就没有那么快了!这不最近在看以前买的书籍(今年真的要多看点书籍):php


还有音视频接口和解封装框架,我差很少快捋顺了,其实以前不少人问的接口,彻底能够去ffmpeg官网查文档说明,并且上面还有不少的demo测试案例说明:
html

差很少下周开始继续更新音视频的学习笔记;nginx


今天这篇文章呢,主要是总结一下过年期间复习的nginx负载均衡一些配置简单的实战演示!web

2、nginx的常见使用

这里我主要演示nginx的源码安装以及相应的模块安装,而后讲解一下负载均衡的原理并经过实战来简单演示,还有静态资源的访问(好比说图片和视频的访问),关于什么是nginx,它是干什么用的,网上有不少介绍,这里我就不啰嗦了,我挑重点实战来分享!正则表达式

一、nginx以及相关模块源码安装:ubuntu

咱们先进行源码所须要的模块
vim

-- nginx-1.13.7.tar.gz数组

-- openssl-1.1.0g.tar.gz服务器

-- pcre-8.41.tar.gz微信

-- zlib-1.2.11.tar.gz


对应下载地址:

wget http://nginx.org/download/nginx-1.13.7.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
wget http://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz


(1)解压nginx:

(2)解压openssl:

(3)解压pcre:

(4)解压zlib:



(5)进行配置,先进入到nginx里面去,而后执行下面语句:


./configure --prefix=/usr/local/nginx 
--with-http_realip_module
--with-http_addition_module
--with-http_gzip_static_module
--with-http_secure_link_module 
--with-http_stub_status_module
--with-stream
--with-pcre=/home/txp/share/nginx/pcre-8.41
--with-zlib=/home/txp/share/nginx/zlib-1.2.11 
--with-openssl=/home/txp/share/nginx/openssl-1.1.0g

而后直接make:


而后接着再sudo make install:

最终咱们能够看到在/usr/local/nginx/目录下看到安装的nginx:

如今咱们能够试着来运行nginx,并进行访问(下面的访问成功):





这里小结一下:

不少开源软件的安装步骤大概都差很少是下面这样的套路(好比等下咱们下面要安装的模块,也是这样安装的思路,因此这里就不造轮子了)

-- ./cofigure

-- make

--sudo make install

二、本身写conf文件

在平时的开发过程当中,主要咱们要去配置它的conf文件夹下的nginx.conf文件

root@ubuntu:/usr/local/nginx# ls
client_body_temp  conf  fastcgi_temp 
html  logs  proxy_temp  sbin  scgi_temp 
uwsgi_temp

这个文件本来内容是:

#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 {
    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 {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

这里内容比较多,咱们如今本身来写一个配置文件来实现nginx的访问:

txp@ubuntu:/usr/local/nginx$ sudo mkdir demo_conf
txp@ubuntu:/usr/local/nginx$ cd demo_conf/
txp@ubuntu:/usr/local/nginx$ vim demo_conf/demo.conf
worker_processes 4;#进程数量


events{
        worker_connections 1024;#并发访问数量


}
http{
        server {
                listen 8888;#监听端口
                server_name localhost;#服务器名称

                client_max_body_size 100m;#访问的数量大小

                location / {
                root /usr/local/nginx/html/ #访问这个本地服务器里面的这个html页面

                }
        }

}

如今咱们来看一下咱们本身配置的是否成功,先把以前的nginx关闭掉:

./sbin/nginx -s stop

而后再执行这个配置文件:

./sbin/nginx -c demo_conf/demo.conf

这里扩展一下基础知识点:

Nginx 由配置文件中指定的指令控制的模块组成。指令分为简单指令和块指令。一个简单的指令由空格分隔的名称和参数组成,并以分号(;)结尾。块指令具备与简单指令相同的结构,但不是以分号结尾,而是以大括号({和})包围的一组附加指令结束。若是块指令能够在大括号内部有其余指令,则称为上下文(例如:events,http,server 和 location)。配置文件中放置在任何上下文以外的伪指令都被认为是主上下文。events 和 http 指令驻留在主上下文中,server 在 http 中的,而 location 在 http 块中

三、负载均衡、反向代理和静态资源的访问演示:

--反向代理原理(ReverseProxy):它是指以代理服务器来接受internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给internet上请求链接的客户端,简单来讲就是真实的服务器不能直接被外部网络访问,想要访问必须经过代理,以下图所示:

上图中有两个网关,一个是nginx应用层网关,一个路由器硬件网关,nginx和各服务器都是在同一个局域网里面;路由器它作了一个端口映射(nat)直接访问到nginx,给人的感受nginx就在公网上面

注意这里的服务器对外不提供服务的,经过nginx代理来向外提供服务;外面访问的是公网ip,而后经过端口映射找到nginx

如今咱们用nginx作代理配置(好比说我这里用143的这台机器代理141这台机器):

worker_processes 4;


events{
        worker_connections 1024;


}
http{
        server {
                listen 8888;
                server_name localhost;

                client_max_body_size 100m;

                location / {
                root /usr/local/nginx/html/;
                proxy_pass http://192.168.29.141;
                }
        }

}

注意:141的那台机器也安装nginx了,而后当我访问143这台机器的时候,其实访问的是141这台机器的内容,这就是代理的使用了

-- 负载均衡:从负载均衡四个字来看,确定是用来减轻服务器的访问压力的;好比说当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃(好比每一年双十一活动,淘宝就使用了nginx的负载均衡的功能,否则当天那么多的用户活跃在淘宝上,服务器确定吃不消啊!)。所以为了不服务器崩溃,让用户有更好的体验,咱们经过负载均衡的方式来分担服务器压力。咱们能够创建不少不少服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器(也就是咱们的nginx),在让这个中间服务器在服务器集群中选择一个压力较小的服务器,而后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每一个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的状况。

下面我演示负载均衡案例:

worker_processes 4;


events{
        worker_connections 1024;


}
http{
        upstream backend{
                server 192.168.29.142 weight=2;//weight表示权重
                server 192.168.29.141 weight=1;
        }
        server {
                listen 8888;
                server_name localhost;

                client_max_body_size 100m;

                location / {
             #   root /usr/local/nginx/html/;
        #       proxy_pass http://192.168.29.141;
                proxy_pass http://backend;
                }
        }

}

注意:权重表示被访问的更多,这里因为我三台机器都安装了nginx,因此内容显示看不出什么不一样之处来,其实142的机器被访问了2次,141的机器被访问了1次,我这里有三台机器:14一、14二、143:


-- 访问静态资源(图片和视频)

这里我在143的机器上放了几张图片,而后在/usr/local/nginx目录下建立了一个images文件夹,而后把143机器上的图片copy到images下面来:

root@ubuntu:/usr/local/nginx# ls
client_body_temp  fastcgi_temp  images  proxy_temp  scgi_temp   vip_conf
conf              html          logs    sbin        uwsgi_temp

root@ubuntu:/usr/local/nginx# mv /home/txp/share/nginx/*.png images/
root@ubuntu:/usr/local/nginx# ls
client_body_temp  fastcgi_temp  images  proxy_temp  scgi_temp   vip_conf
conf              html          logs    sbin        uwsgi_temp
root@ubuntu:/usr/local/nginx# cd images/
root@ubuntu:/usr/local/nginx/images# ls
1.png  2.png  3.png

而后进行conf文件配置:

worker_processes 4;


events{
        worker_connections 1024;


}
http{
        upstream backend{
                server 192.168.29.142 weight=2;
                server 192.168.29.141 weight=1;
        }
        server {
                listen 8888;
                server_name localhost;

                client_max_body_size 100m;

                location / {
             #   root /usr/local/nginx/html/;
        #       proxy_pass http://192.168.29.141;
                proxy_pass http://backend;
                }
                location /images/ {
                root /usr/local/nginx/;
                }

        }
}

实现结果以下:

下面我在演示一下视频访问,一样,我建立一个media目录,而后把143机器上的test.mp4copy到media目录来:

root@ubuntu:/usr/local/nginx# mv /home/txp/share/nginx/test.mp4  media/
root@ubuntu:/usr/local/nginx# cd media/
root@ubuntu:/usr/local/nginx/media# ls
test.mp4

conf文件配置:

worker_processes 4;


events{
        worker_connections 1024;


}
http{
        upstream backend{
                server 192.168.29.142 weight=2;
                server 192.168.29.141 weight=1;
        }
        server {
                listen 8888;
                server_name localhost;

                client_max_body_size 100m;

                location / {
             #   root /usr/local/nginx/html/;
        #       proxy_pass http://192.168.29.141;
                proxy_pass http://backend;
                }
                location /images/ {
                        root /usr/local/nginx/;
                }
                location ~\.(mp3|mp4) #这里利用了正则表达式
                        root /usr/local/nginx/media/;
                }

        }
}

结果以下:

3、总结

今天就暂时总结这么多吧,还有cgi和fastcgi的使用和区别,就暂时不讲了,若是哪天有用到,再来实战演示;最后若是对技术热爱的朋友,能够加我微信,进技术交流群交流学习,一块儿进步;通常有问题我也会及时互相交流学习的:

tu18879499804

站在巨人的肩膀上:

https://blog.csdn.net/X1021333506/article/details/80975462?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.baidujs&dist_request_id=6c30ed21-fb2d-462c-a4d8-7c5581c1b504&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.baidujs

https://juejin.cn/post/6844903944267759624

https://ke.qq.com/webcourse/index.html#cid=420945&term_id=102189254&taid=8498121076534353&vid=5285890803239999870

本文分享自微信公众号 - TXP嵌入式(txp1121518wo-)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索