美文网首页
Nginx 基本入门2

Nginx 基本入门2

作者: DayDayUpppppp | 来源:发表于2017-09-15 11:02 被阅读0次
    Nginx是什么

    看了很多教程,我理解nginx 比apache,iis,tomcat等web服务器的优势是,nginx可以更好的支持高并发。传统的web服务器在应对数以万计的http请求,无论是创建进程还是创建线程来应对这些请求,都会消耗大量的cpu和内存。但是nginx通过事件驱动的方式来处理大规模并发连接,是自己获得更好的性能。

    参考资料
    1. 官方的文档应该是一个最好的解释 :
      http://www.nginx.cn/doc/
    2. taobao团队发布的nginx文档:
      http://wiki.jikexueyuan.com/project/nginx/nginx-framework.html
    3. 另外,关于nginx使用,常用功能配置配置的教程:
      http://www.yiibai.com/nginx/beginners_guide.html

    如何安装:
    http://www.cnblogs.com/piscesLoveCc/p/5794926.html

    #update :在安装的时候,最好加上 --with-stream
    #nginx刚刚开始的时候是不支持tcp协议的,在nginx 1.9的版本之后,nginx增加了stream木块,用于tcp代理和负载均衡。编译的时候,通过with-stream参数来激活这个模块
    ./configure --prefix=/usr/local/nginx  --with-stream 
    

    查看linux状态的两个常用命令:

    #查看进程
    ps -aux | grep nginx
    
    #查看监听的端口
    netstat   -atunlp    #a 表示all,t表示tcp,u表示udp,n表示port number,p表示pid,l表示listenning
    
    Nginx的常用命令
    #nginx 的正常关闭,重新加载配置文件,快速关闭
    # -s 表示发送信号
    nginx   -s    [quit | reload | stop ]
    
    nginx -s stop       #nginx关闭
    nginx -s reload     #nginx 重新启动
    sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/ngxin.conf      #nginx以指定的配置文件运行
    nginx -t    #nginx测试配置文件
    nginx -v    #查看nginx版本
    
    #查看log
    tailf  nginx/logs/error.log  
    
    Nginx使用和修改配置文件

    NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。 默认情况下,文件名为nginx.conf。

    配置文件里面有几个顶级指令:

    1. events : 一般连接处理
    2. http : http协议流量
    3. mail : mail协议流量
    4. stream : tcp协议流量

    这个内容有点多,新写了一篇博客 :
    http://www.jianshu.com/p/7e4d54ba6dc8

    用Nginx做的一些好玩的

    Demo :nginx 实现web-server负载均衡
    image.png

    让nginx监听在80端口,然后其在启动两个flask的web server,分别监听5000和5001端口。nginx 将请求分发到这两个flask 的web server上面,实现一个负载均衡。

    配置如下:
    在nginx/conf/nginx.conf 文件里面的http块下面 创建

        #upstream
        upstream pyserver{
            server 127.0.0.1:5000;
            server 127.0.0.1:5001;
        }
    

    在server块下面创建location

            location /upstream {
                proxy_pass http://pyserver;
            }
    

    flask web server1 的配置如下:

    from flask import Flask
    #from flask.ext.script import Manager
    
    app=Flask(__name__)
    
    @app.route('/upstream')
    def upstream():
            return '<h1>pyserver1 port 5000 </h1>'
    
    if __name__=='__main__':
        app.run(debug=True)
        #manager.run()
    

    flask web server2 的配置如下:

    from flask import Flask
    #from flask.ext.script import Manager
    
    app=Flask(__name__)
    
    @app.route('/upstream')
    def upstream():
            return '<h1>pyserver1 port 5001 </h1>'
    
    if __name__=='__main__':
        app.run(debug=True,port=5001)
        #manager.run()
    

    效果:

    #如果不停的执行下面的命令,可以看出来每次输出的结果都不同
    curl 127.0.0.1/upstream
    

    这两个页面交替出现,说明nginx的配置是work的,每次的请求被负载到不同的服务器上面。


    image.png
    image.png
    Demo:nginx 配置tcp流量转发,实现ssh可以访问内网主机

    在学习nginx 的时候,发现nginx 不仅可以实现http请求的转发和负载均衡,同时也可以实现tcp协议级别的转发和负载均衡。于是,尝试着用nginx配置一个tcp流的转发,可以实现用ssh访问内网的主机,发现还是很好玩的。

    下图是我的想法:

    image.png

    实现过程:
    配置nginx.conf 文件里面,创建一个stream的块

    #注意这个块不在http块里面,与http块和event块是平行的
    
    #这个配置表示,对于nginx运行的主机的10001的tcp请求转发到127.0.0.1:22端口
    #为了演示方便,我把这个改成了本地的ip
    stream{
            upstream ssllink12{
                    server 127.0.0.1:22;
            }
            server{
                    listen 10001;
                    proxy_connect_timeout 20s;
                    proxy_timeout 5m;
                    proxy_pass ssllink12;
            }
    }
    

    效果:

    #-p表示给ssh的连接指定一个端口
    ssh zhaozheng@127.0.0.1 - p 10002
    
    2017-09-15 10-53-40屏幕截图.png
    Demo3:搭建一个自己的代理服务器

    做完了demo2的tcp转发,突然有一个想法,就是搭建一个自己的代理服务器。在实验室的一个机器上面部署(实验室是可以免费上网的),然后在寝室或者是在图书馆的时候,通过校园内网,让实验室的这个机器作为代理服务器上网,这样自己岂不是可以可以不用交宽带的费用了~~~

    step1 : 在nginx的配置文件里面nginx.conf的http块下面

    #nginx 监听8080端口,并且转发对于这个端口的http请求
    server {
            listen       8080;
            server_name  localhost;
            location / {
                resolver       8.8.8.8;
                proxy_pass     $scheme://$http_host$request_uri;
            }
    }
    

    step2 :
    这是实验室的网络拓扑


    image.png

    这是有一个小问题,就是我的这台设备只能拿到一个私有的ip地址,是不可以被访问的,所有要在在实验室的路由器上面实现一个端口的绑定,如下图所示,就是将 路由器的wan ip +20003端口的流量转发到 我的设备的8080端口。


    路由器的NET配置.png

    step3 :
    在客户机上面的internet选项里面,设置代理。这个表示将client的请求转发到这个ip+端口上面。


    image.png

    step4 :
    尝试一下在客户机上面上网,是可以的!但是这个有一个问题,就是当访问使用https的站点的时候,就出问题了。

    查看log的时候,也证明了这一点,对于没有https的站点,都是可以的,对于https的站点,就不行。

    对没有https站点的请求.png 对于https站点的请求.png

    相关文章

      网友评论

          本文标题:Nginx 基本入门2

          本文链接:https://www.haomeiwen.com/subject/fstjsxtx.html