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

<think>嗯,用户想学习Nginx,那我得先介绍Nginx是什么,以及它的主要用途。Nginx是一个高性能的Web服务器,还能做反向代理、负载均衡什么的。应该从基础开始,先讲它的背景和特点,比如处理高并发的能力,事件驱动模型这些。 接下来,用户可能需要知道为什么选择Nginx,比如和Apache的对比,处理静态资源的优势,还有模块化设计。然后应该介绍核心功能,比如HTTP服务器、反向代理、负载均衡策略,还有SSL终端这些。 然后得说说实际应用场景,比如动静分离、反向代理配置、负载均衡的例子,还有缓存和HTTPS配置。这部分要具体一点,可能用户想知道怎么用,所以给一些配置示例会有帮助,但得用正确的中文和LaTeX格式,比如变量用$variable$。 安装和配置部分需要分操作系统,比如CentOS用yum,Ubuntu用apt,编译安装的话步骤更多。配置文件的结构也要说明,http块、server块、location块这些,可能还要提到日志管理和常用命令,比如重启Nginx。 高级部分可以涉及性能优化,比如worker进程数、连接数限制,安全配置如防止DDoS,还有动态模块加载。最后推荐学习资源,官方文档、书籍、在线教程,社区论坛这些,帮助用户继续深入学习。 还要注意用户可能的问题,比如配置出错怎么办,性能调优参数,或者如何实现特定功能。结构要清晰,分点说明,确保用户能一步步理解和应用。检查一下有没有用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,但技术内容中可能公式不多,主要是一些配置示例和术语,比如变量名用$host$。确认中文表达正确,没有语法错误,然后组织成易于阅读的章节。</think>以下为分步介绍的Nginx学习指南: ### 一、Nginx基础认知 1. **定义与背景** - 诞生于2004年,由俄罗斯工程师Igor Sysoev开发 - 2024年统计数据显示:全球32.2%的Web服务器使用Nginx(Netcraft数据) - 核心优势:高并发处理能力(单机可支持5万+并发连接) 2. **核心特性** - 事件驱动架构(Event-driven) - 异步非阻塞I/O模型 - 模块化设计(官方模块+第三方模块) - 低内存消耗(处理静态内容时) ### 二、核心功能解析 1. **HTTP服务器** ```nginx server { listen 80; server_name example.com; root /var/www/html; index index.html; } ``` 2. **反向代理配置** ```nginx location / { proxy_pass http://backend_server; proxy_set_header Host $host; } ``` 3. **负载均衡策略** - 轮询(默认) - 加权轮询 - IP哈希 ```nginx upstream backend { server 10.0.0.1 weight=3; server 10.0.0.2; server 10.0.0.3 backup; } ``` ### 三、典型应用场景 1. **动静分离架构** ```nginx location ~* \.(jpg|css|js)$ { expires 30d; access_log off; } ``` 2. **SSL终端配置** ```nginx server { listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; } ``` ### 四、安装与配置实践 1. **主流系统安装** - CentOS: `$ yum install nginx` - Ubuntu: `$ apt install nginx` - 源码编译(支持自定义模块) 2. **配置文件结构** ``` main(全局配置) ├── events(事件模型) └── http(HTTP核心) ├── server(虚拟主机) │ └── location(URI匹配) └── upstream(负载均衡) ``` ### 五、性能优化参数 1. **关键配置项** ```nginx worker_processes auto; # CPU核心数 worker_connections 1024; # 单个进程连接数 keepalive_timeout 65; ``` 2. **缓存优化示例** ```nginx proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m; ``` ### 六、安全加固建议 1. 隐藏版本信息: ```nginx server_tokens off; ``` 2. 限制请求方法: ```nginx if ($request_method !~ ^(GET|POST)$ ) { return 405; } ``` ### 七、学习路径推荐 1. **官方文档**:nginx.org/en/docs/ 2. **实践建议**: - 从简单静态服务开始 - 逐步添加代理、缓存功能 - 使用`nginx -t`测试配置 - 掌握日志分析(access.log/error.log) ### 八、常见问题定位 1. 502 Bad Gateway:检查后端服务状态 2. 地址重写错误:验证rewrite规则 3. 权限问题:确保worker进程有文件访问权限 附:性能测试工具推荐 ```bash $ ab -n 1000 -c 100 http://test.com/ $ wrk -t4 -c100 -d30s http://test.com/ ``` 建议学习过程中配合Docker环境进行实验,避免影响生产系统。随着云原生发展,建议后续延伸学习Nginx Ingress Controller等云环境应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值