nginx学习 - Go语言中文社区

nginx学习


了解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有许多学习的地方,本人不才,也只是刚学习不久,只能乱七八糟的表达出自己的理解………

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/konglei1996/article/details/70983869
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 09:42:58
  • 阅读 ( 949 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢