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负载均衡
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器。根据搜索的教程照做,对于原理一...
    Cocoa_Coder阅读 17,093评论 4 56
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,192评论 5 124
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,637评论 24 1,002
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,921评论 21 356