1.nginx简介

官方文档

Nginx是一个高性能WEB服务器,除它之外Apache、Tomcat、Jetty、IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相应地也都具备Web服务器的基本功能,它处理高并发能力也是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

Tomcat、Jetty 面向java语言,先天就是重量级的WEB服务器,其性能与Nginx没有可比性。

nginx 和可以做什么事情

  • 正向代理
  • 反向代理
  • 动静分离

2. 安装启动

安装环境准备:

最好是linux内核在2.6 及以上.只有2.6之后才支持epool ,在此之前使用select或pool多路复用的IO模型,无法解决高并发压力的问题。通过命令uname -a 即可查看。

#查看 linux 内核
uname -a

(1)GCC编译器

GCC(GNU Compiler Collection)可用来编译C语言程序。Nginx不会直接提供二进制可执行程序,只能下载源码进行编译。

(2)PCRE库

PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。

(3)zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量。

(4)OpenSSL开发库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

上面几个库都是Nginx 基础功能所必需的,为简单起见我们可以通过yum 命令统一安装。

#yum 安装nginx 环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel

源码获取:

nginx 下载页:http://nginx.org/en/download.html

  1. 下载到本地后 解压 并进入到解压之后的目录
# 解压
tar -zxvf nginx-1.14.0.tar.gz
  1. 执行configure文件
./configure

会在objs目录中生成安装所需的相关文件 比如makefile

  1. 再在主目录执行 make 编译命令 make

会在objs中生成编译好的nginx二进制可执行文件

  1. 执行make install 将 nginx 可执行文件copy到 默认的目录,并生成运行相关的文件夹及文件

    默认目录为 /usr/local/nginx

  2. 进入到/usr/local/nginx/sbin 目录 并执行命令 ./nginx 启动nginx

    浏览器访问 127.0.0.1 端口默认80 看到如下这个页面 即为启动成功

更新模块

nginx 的功能 都是以module的模式进行安装 ,再我们安装nginx时 已经默认安装了许多module 大多数情况下都可以满足,也可以自己添加模块

ngx_http_stub_status_module为例

官方的解释:

The ngx_http_stub_status_module module provides access to basic status information.

This module is not built by default, it should be enabled with the --with-http_stub_status_module configuration parameter.

提供对基本状态信息的访问 , 默认情况下未构建此模块

回到我们下载解压的安装包目录, 重新执行configure 并指定模块

# 添加状态查查看模块
./configure --with-http_stub_status_module

再重新构建nginx执行文件

# 重新创建文件
make

可以手动将 objs 下生成的nginx 文件 拷贝到 你的nginx安装目录 sbin下 并覆盖 ,也可以直接执行make install 会自动拷贝到默认的文件夹 并将老的nginx文件备份

# 复制过去
cp objs/nginx /usr/local/nginx/sbin/

执行命令 查看是否更新成功

# 查看详细信息 V 大写
/usr/local/nginx/sbin/nginx -V

编辑配置文件 /usr/local/nginx/conf/nginx.conf

在server 模块中添加如下配置

 server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; # http_stub_status_module 相关配置
location = /basic_status {
stub_status;
} location / {
root html;
index index.html index.htm;
} #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;
}

浏览器访问http://127.0.0.1/basic_status

可以在浏览器中看到当前nginx 健康状态

Active connections: 2
server accepts handled requests
5 5 4
Reading: 0 Writing: 1 Waiting: 1

3. 常用命令

  1. 查看命令帮助

    ./sbin/nginx -?
  2. 默认方式启动:

    ./sbin/nginx
  3. 指定配置文件启动

    ./sbing/nginx -c /tmp/nginx.conf
  4. 指定nginx程序目录启动

    ./sbin/nginx -p /usr/local/nginx/
  5. 快速停止(立即关闭nginx服务)

    ./sbin/nginx -s stop
  6. 正常停止(拒绝新的请求,但会讲已经接受的请求处理完毕)

    ./sbin/nginx -s quit
  7. 不重启服务 重新加载配置文件

    ./sbin/nginx -s reload
  8. 重新打开日志文件

    ./sbin/nginx -s reopen
  9. 查看版本

    ./sbin/nginx -v

4. 配置文件

默认的配置文件

# worker线程的个数
worker_processes 1; # events块
events {
# 一个worker线程最多创建多少个 连接
    worker_connections  1024;
} #http块
http {
# 包含本目录下的 mime.types 下的内容
    include       mime.types;
    #
    default_type  application/octet-stream;
    sendfile        on;
   
    #长连接最大的超时闲置时间
    keepalive_timeout  65;
   
    # 配置一个站点 可以配置多个
    server {
    #站点监听的端口
        listen       80;
        #站点的名称 匹配以什么方式访问该站点,如果以 localhost:80 的方式 就访问这个站点
        #就访问这个站点     
        server_name  localhost;
       
        #拦截的路径
        location / {
        # 指定该站点的跟目录
            root   html;
            #指定index页面(当没有指定文件时 访问这个文件)
            index  index.html index.htm;
        }
} server {
   
        listen       80;
        #本机ip为192.168.100.80 如果以 127.0.0.1:80 的方式 即访问这个站点
        # 也可以有多个 已www.test.com 访问也是这个站点 以空格隔开
        # 通配符:www.*.com
        # 如果有多个站点都相符 则以最大匹配度最大原则
        # 左边匹配 大于右边匹配 即 *.test.com 优于 www.test.*
        # 如果优先级一样则 在前面的优于后面的
        # 如果所有的都不匹配 都匹配 标注default的 站点 如果没有就匹配监听80端口的第一个
        server_name  192.168.100.80 www.test.com default;
        location / {
            root   html;
            index  index.html index.htm;
        }
} }

主要由 配置块 例如:events、http、server、location 等 和 配置块中的属性 例如:worker_connections、include、listen 等 构成 ,/nginx_status 属于配置块的特定参数。其中server块嵌套于http块,其可以直接继承访问Http块当中的参数

  1. 使用 root 拦截时 会将访问路径加到更站点的后面

    		#通过 127.0.0.1/user/conf 访问时
            location / {
            # 会基于 html跟目录访问
            # 相当于 访问html/user/conf
                root   html;
                #指定index页面
                index  index.html index.htm;
            }
  2. 使用alias 去除 匹配到的路径

    		#通过 127.0.0.1/user/conf 访问时
            location /user {
            # 相当于 访问html/conf
                alias   html;
                #指定index页面
                index  index.html index.htm;
            }

root 和 alias的区别

root: 指定 站点的跟目录 会拼接拦截的路径 http 模块下和 loaction模块下都可以配置 location 优先

alias: 指定 站点的别名 去除匹配的拦截路径 只能配置在 location下

location的匹配方法(优先级从上到下)

  1. =表示把URI作为字符串,以便与参数中的uri做完全匹配。

    # 访问路径 127.0.0.1/user 需要完全匹配
    location = user {
           
            }
  2. ^~表示 匹配URI时只需要其前半部分与uri参数匹配即可。

    # 匹配任何已 /test/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
    # 例如: 127.0.0.1/test/a
    location ^~ /test/ { }
  3. ~ 表示uri里面包含正则,并且区分大小写

    # 正则匹配 以静态文件结尾 例如 127.0.0.1/user/test.jpg
    location ~ \.(png|jpg|mp4)$ {
            # 相当于 访问html/conf
                alias   html;
                #指定index页面
                index  index.html index.htm;
            }
  4. ~* 表示uri里面包含正则,不区分大小写。

  5. / 基于uri目录匹配

对连接进行限速

location /download {
    limit_rate 1m; // 限制每S下载速度为1M
limit_rate_after 30m; // 超过30M 之 后再限速
}

防盗链配置:

# 设置访问png jpg等静态资源 放盗链
location ~ \.(png|jpg|mp4)$ {
        valid_referers none blocked www.baidu.com;
if ($invalid_referer) {
return 403;
}
}

该功能由 ngx_http_referer_module 模块实现,判断请求头中的 referer 字段 判断访问的原地址, 并添加白名单,例如本案例 为百度可以访问, 如果不符合条件则返回403错误

但是此方法完全依赖 referer 属性, 只能防止常规浏览器常规操作 如有更复杂的需要 可以使用 http_accesskey_module 模块判断url的自定义 key判断

创建IP黑名单,白名单

http_accesskey_module 模块功能

# 封禁规则从上至下依次执行
location / {
#封禁指定IP
deny 192.168.0.1;
#开放指定IP
allow 192.168.0.1;
#开放指定IP段
#斜杠后面的24代表 :匹配最后一位最大值 即 匹配 192.168.0.1 -> 192.168.0.254
# 16:匹配后两位最大值 192.168.0.1 -> 192.168.255.254
# 8:匹配后三位最大值的 192.0.0.1 -> 192.255.255.254
allow 192.168.0.0/24;
#封禁所有
deny all;
#开放所有
allow all;
}

nginx 基本功能的更多相关文章

  1. 转:Nginx RTMP 功能研究

    看点: 1.    Nginx 配置信息与使用.  (支持 rtmp与HLS配置) 2.    有ffmpeg 编译与使用,    命令行方式来测试验证客户端使用. 转自:http://blog.cs ...

  2. Nginx之旅系列 - Nginx日志功能 PK Linux内核printk

    题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx日志功能 PK Linux内核pri ...

  3. 3.Nginx常用功能介绍

    Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...

  4. [转]Nginx基本功能极速入门

    原文链接:Nginx基本功能极速入门 | 叉叉哥的BLOG 本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理.废话不多,直接开始. 1.静态HTTP服务器 ...

  5. Nginx常用功能

    3.Nginx常用功能 3.1 反向代理服务器 3.1.1.demo2 a.我在tomcat下部署了一个javaweb项目,tomcat安装的服务器IP为:192.168.37.136,部署的项目在t ...

  6. Nginx主要功能及使用

    Nginx配置详解   序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富, ...

  7. Nginx常用功能配置二

    Nginx常用功能配置二 Nginx location匹配设置 location作用:可以根据用户请求的URI来执行不同的应用,根据用户请求的网站的地址URL匹配. location语法: locat ...

  8. Nginx常用功能配置一

    Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...

  9. nginx 日志功能详解

    nginx 日志功能 在 nginx 中有两种日志: access_log:访问日志,通过访问日志可以获取用户的IP.请求处理的时间.浏览器信息等 error_log:错误日志,记录了访问出错的信息, ...

  10. nginx常用功能和配置

    nginx常用功能和配置 1.nginx常用功能和配置 1.1 限流 1.2 压力测试工具--Ab 1.2.1安装 1.2.2 测试 1.2.3 返回值 1.3 limit_conn_zone 1.4 ...

随机推荐

  1. true=='true'这个等式成立吗?

    在localStorage存入里面的数据是字符串,如果你存入了一个值是Boolean类型的, 那你你取出来就是一个字符串 'true' 或者 'false' 假设取出来的值是 'true' 在你进行i ...

  2. 【一个小发现】VictoriaMetrics 中 vmselect 的 `-search.denyPartialResponse` 选项不应该开启

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一直以为vmselect 的 -search.denyPa ...

  3. 【代码片段】fasthttp 中的输出使用 gzip 压缩

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 直接上代码: import ( "github. ...

  4. js 闭包详解一

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...

  5. 乌班图安装docker

    目录 一.前言 二.安装 2.1 设置仓库 2.3 安装 Docker Engine 2.4 安装特定版本的 Docker Engine: 2.5 测试 三.配置非 root 用户运行 Docker ...

  6. 时间工具类-Java

    1.根据传入时间获取该时间所在季度的第一天 /** * 根据传入时间获取传入日期所在季度的第一天的日期 * * @param startDate * @return */ public static ...

  7. Dart常用核心知识

    Dart简述 Dart 是一个为全平台构建快速应用的客户端优化的编程语言,免费且开源. Dart是面向对象的.类定义的.单继承的语言.它的语法涵盖了多种语言的语法特性,如C,JavaScirpt, J ...

  8. 性能暴增70%!AMD线程撕裂者RPO 7000将于10月19日发布: 96核心Zen 4史无前例

    据wccftech最新报道,AMD的下一代Ryzen Threadripper(线程撕裂者)PRO 7000"Storm Peak"CPU将于10月19日作为终极工作站解决方案亮相 ...

  9. Git企业开发控制理论和实操-从入门到深入(五)|标签管理

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  10. CH59X/CH58X/CH57X sleep模式下串口唤醒收发数据

    整体程序逻辑: 下方的具体程序及使用是基于CH592进行的 SLEEP模式睡眠唤醒是由协议栈管理的,还在睡眠时,无法接收到数据. 已经通过使能HAL_SLEEP开启睡眠.如果需要在睡眠时实时接收串口传 ...