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