Nginx 基本入门2

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负载均衡
Nginx 基本入门2_第1张图片
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 '

pyserver1 port 5000

' 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 '

pyserver1 port 5001

' if __name__=='__main__': app.run(debug=True,port=5001) #manager.run()

效果:

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

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


Nginx 基本入门2_第2张图片
image.png

Nginx 基本入门2_第3张图片
image.png
Demo:nginx 配置tcp流量转发,实现ssh可以访问内网主机

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

下图是我的想法:

Nginx 基本入门2_第4张图片
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 [email protected] - p 10002
Nginx 基本入门2_第5张图片
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 :
这是实验室的网络拓扑


Nginx 基本入门2_第6张图片
image.png

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


Nginx 基本入门2_第7张图片
路由器的NET配置.png

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


Nginx 基本入门2_第8张图片
image.png

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

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

对没有https站点的请求.png
Nginx 基本入门2_第9张图片
对于https站点的请求.png

你可能感兴趣的:(Nginx 基本入门2)