nginx学习

来源:互联网 发布:共享景观设计 知乎 编辑:程序博客网 时间:2024/06/05 23:43

了解http协议的童鞋都清楚在浏览器发起请求到最终请求结果返回的过程,盗用一张图展示这个过程,如下所示:

这里写图片描述

当然,第5条红色标注的不属于基本的请求处理流程,但是本文主要介绍的就是nginx。

一,nginx介绍、安装、基本用法

根据官方文档来说,nginx就是一个http和反向代理服务器。对于我们而言,它比tomcat更易于学习和使用,下面说说如何安装:

1.打开官网,下载,一般都是下载稳定版

这里写图片描述


2.下载完后,解压到一个目录中,启动方式有两种,第一种点击解压后的nginx.exe启动,第二种便是通过命令行启动 start nginx, 当然,如果你不想每次启动都要进入到nginx所在目录,你就需要在系统配置里配置下它的PATH环境变量。


3.nginx的几种基本命令行,如下:

1. start nginx  #启动nginx服务器2. nginx -s reload  #假如你编辑了nginx的某个配置文件,通过这个命令行重新加载一遍,如果有错,会有提示#3. nginx -s stop  #关闭服务器4. nginx -s quit  #也是关闭服务器5. nginx -s reopen #重新打开日志文件

2.nginx文件配置

这里可以参照这个博客,讲的很详细http://www.jianshu.com/p/bed000e1830b

3.nginx反向代理实例

最近做一个上传头像的功能,之前有听说过反向代理这回事,便在这个地方牛刀小试一下,也是帮助学习nginx。

首先看下实例中nginx的配置文件/conf/nginx.conf:

http {    ...    sendfile        on;    tcp_nopush     on;    sendfile_max_chunk 256k;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    #自己的应用服务器    upstream localhost {        server   localhost:8989; #node服务器    }    server {        listen       80;        server_name  localhost;        autoindex_exact_size off;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            proxy_pass    http://localhost;            index    index.html;        }        #上传的图片目录位置,上传成功后只需打开http://localhost/image/图片名便可看到图片        location /image/ {            expires  30d;            root      D:/ngnix/nginx-1.11.13/files;#图片存放位置        }        #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;        }       }}

node服务器,路径配置/config/index.js

module.exports = {    "image_url":"http://localhost/image",   //配置文件访问路径    "image_dir":"D:/ngnix/nginx-1.11.13/files/image",   //最终图片路径    "tmp_dir":"D:/ngnix/nginx-1.11.13/tmp", //临时路径    "port": 8989}

使用node.js第三方模块formidable,处理上传头像路径问题,主要代码如下:

var formidable = require('formidable'),    path = require('path'),    fs = require('fs');var setting = require('../config');/** * 上传 */exports.upload = function(req,res){    var form = new formidable.IncomingForm();    form.encoding = 'utf-8';    //图片存放目录    var img_dir = setting.image_dir;    //上传文件的临时路径    var tmp_dir = setting.tmp_dir;    form.uploadDir = tmp_dir;    //保留临时文件的扩展名    form.keepExtensions = true;    //文件大小限制,默认2MB    form.maxFieldsSize = 2 * 1024 * 1024;    form.parse(req, function(err, fields, files) {        //图片路径        var img_path = path.resolve(img_dir, files.file.name);        fs.rename(files.file.path, img_path, function(err){            if(err){                res.json({code:10001,msg:err});            } else{                var img_url = `${setting.image_url}/${files.file.name}`;                res.json({code:200, image_url:img_url});            }        })    })}

客户端:

 <form action="`http://localhost/upload`" method="post" enctype="multipart/form-data">            <input type="file" name="file">            <p>            <input type="submit" value="上传">        </form>

结果
这里写图片描述
这里写图片描述
从返回的请求头可以看到server: nginx/1.11.13,可以看出使用了代理服务器。

这里的过程主要是,点击按钮,请求接口,请注意接口是写的http://localhost/upload,能看出来这个url写的是nginx代理服务器的地址,请求发送到nginx,发现没这个upload,便会到配置中的node服务器中去找,nginx反向代理服务器便起到了一个负责转发请求的作用。

总结,nginx有许多学习的地方,本人不才,也只是刚学习不久,只能乱七八糟的表达出自己的理解………

0 0
原创粉丝点击