Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

常用场景

  • 静态资源服务器
  • 代理服务
  • 跨站资源访问
  • 适配PC与移动端环境
  • 负载均衡调度
  • 缓存服务
  • 简单的访问控制
  • 图片处理

默认配置文件

全局块:nginx 全局配置。比如用户以及用户组 usernginx 进程 pid 文件存放路径,日志存放路径 error_log,工作进程worker process 数等,也可以引入配置文件。

events 块:服务器连接相关配置。比如进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

http 块:可嵌套多个虚拟主机 server,配置代理,设置缓存,配置日志定义等。支持很多第三方模块的配置。比如文件引入,mime-type 定义,图片压缩,日志自定义,传输文件配置,设置连接超时时间,单个连接请求数等等。

server 块:虚拟主机的相关配置。

location 块:请求的路由相关配置,特殊页面的处理。

# {全局块}# 设置用户组
#user  nobody;
# 配置用户或者组,默认为nobody nobody。
#user admin admin;  # 设置工作进程的数量
worker_processes  1;# 指定日志路径,日志级别包括 debug | info | notice | warn | error | alert 等
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;# 指定进程文件
#pid        logs/nginx.pid;events { # {event块}# 设置一个进程是否同时接受多个网络连接,默认为off#multi_accept on;# 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport#use epoll;# 进程的最大连接数worker_connections  1024;
}http { {#http块}# 文件拓展名查找集合include       mime.types;# 默认文件类型为文件流,匹配.*default_type  application/octet-stream;# 日志格式定义,main为日志别名#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';# 取消服务日志#access_log off;# 指定日志输入文件#access_log  logs/access.log  main;# 调用 sendfile 系统传输文件,sendfile on 表示通过文件描述符直接拷贝,而不是用read()/write()sendfile        on;# tcp_nopush = on 会设置调用tcp_cork方法,这个也是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。#tcp_nopush     on;# 设置连接超时时间#keepalive_timeout  0;keepalive_timeout  65;# 是否启用 gzip 压缩,需要浏览器支持,需要解压缩#gzip  on;# 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)#gzip_http_version 1.1;# 设置压缩级别,压缩级别越高压缩时间越长  (1-9)#gzip_comp_level 4;# 设置压缩的最小字节数, 页面Content-Length获取#gzip_min_length 1000;# 设置压缩文件的类型#gzip_types text/plain application/javascript text/css;server { #{server块}# 监听端口listen       80;# 虚拟主机名称server_name  localhost;# 设置编码字符集#charset koi8-r;# 指定日志输入文件#access_log  logs/host.access.log  main;# 监听请求路由location / { #{location块}# 查找根目录root   html;# 默认匹配index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html# 重定位服务器错误到静态页面 /50x.htmlerror_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}
复制代码

nginx 内置变量

  • $args : #这个变量等于请求行中的参数,同 query_string
  • $content_length : 请求头中的 Content-length 字段。
  • $content_type : 请求头中的 Content-Type 字段。
  • $document_root : 当前请求在 root 指令中指定的值。
  • $host : 请求主机头字段,否则为服务器名称。
  • $http_user_agent : 客户端 agent 信息
  • $http_cookie : 客户端 cookie 信息
  • $limit_rate : 这个变量可以限制连接速率。
  • $request_method : 客户端请求的动作,通常为 GETPOST
  • $remote_addr : 客户端的 IP 地址。
  • $remote_port : 客户端的端口。
  • $remote_user : 已经经过 Auth Basic Module 验证的用户名。
  • $request_filename : 当前请求的文件路径,由 rootalias 指令与 URI 请求生成。
  • $scheme : HTTP 方法(如 httphttps)。
  • $server_protocol : 请求使用的协议,通常是 HTTP/1.0HTTP/1.1
  • $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
  • $server_name : 服务器名称。
  • $server_port : 请求到达服务器的端口号。
  • $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
  • $uri :不带请求参数的当前 URI$uri 不包含主机名,如”/foo/bar.html”。
  • $document_uri : 与 $uri 相同

nginx 基本命令

  • nginx -t 检查配置文件是否有语法错误
  • nginx -s reload 向主进程发送信号,重新加载配置文件
  • nginx -s stop 快速关闭
  • nginx -s quit 等待工作进程处理完成后关闭

location 匹配规则(优先级递减)

匹配符 含义
= 进行普通字符精确匹配。也就是完全匹配
^~ 前缀匹配。如果匹配成功,则不再匹配其他location
v~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
/xxx/ 常规字符串路径匹配
/ 通用匹配,任何请求都会匹配到

静态资源服务器

常见的静态资源包括图片,文档,视频等文件,所以 nginx 常用来作为静态网站服务器,或者作为 cdn 资源服务器。 例如以下是一个前后端分离的工程的前端工程部署配置:

...
server {...listen  8080;server_name localhost;root html/project;location / {// 按照优先级 '$uri' > '$uri/' > '/index.html' > '=404'依次匹配try_files $uri $uri/ /index.html =404;index  index.html index.htm;}
}
复制代码

代理服务

nginx 用作代理服务器可以作为正向代理或者反向代理,而反向代理正是跨站资源访问的解决方案之一。 如下是正向代理配置:

...
server {...listen  8080;server_name localhost;# DNS 域名解析服务器resolver 8.8.8.8;# 解析超时时间resolver_timeout 5s;location / {proxy_pass   $scheme://$http_host/$request_uri;proxy_set_header Host $http_host;proxy_buffers 256 4k;proxy_max_temp_file_size 0;proxy_connect_timeout 30;proxy_cache_valid 200 302 10m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;}
}
复制代码

一次代理,直接在shell执行:

export http_proxy=http://x.x.x.x:8080
复制代码

永久使用:

vim ~/.bashrc
export http_proxy=http://x.x.x.x:8080
source .bashrc # 刷新以加载变量
复制代码

跨站资源访问

反向代理配置如下:

...
server {...listen       80;server_name  localhost;location /api {# 代理转发proxy_pass http://localhost:8081;# 路径重写(如果需要)# rewrite  /api/(.*)  /$1  break;# 请求host传给后端proxy_set_header Host $http_host;# 设置用户ip地址proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_buffers 256 4k;proxy_max_temp_file_size 0;# 代理超时时间proxy_connect_timeout 30;# 当请求服务器出错去寻找其他服务器proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; }}
复制代码

适配PC与移动端环境

nginx 可以通过内置变量 $http_user_agent,获取到请求客户端的 userAgent,从而知道用户处于移动端还是PC,进而控制重定向到H5站还是PC站。

...
server {...listen       80;server_name  localhost;location / {# 移动、pc设备适配if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {set $mobile_request '1';}if ($mobile_request = '1') {rewrite ^.+ http://mysite-base-H5.com;}}
}
复制代码

负载均衡调度

RR(round robin:轮询)

...
server {...upstream web_servers {  server localhost:8081;  server localhost:8082;  }server {...listen       80;server_name  localhost;#access_log  logs/host.access.log  main;location / {proxy_pass http://web_servers;# 必须指定Header Hostproxy_set_header Host $host:$server_port;}}
}
复制代码

按权重分配

upstream test {server localhost:8081 weight=1;server localhost:8082 weight=3;server localhost:8083 weight=4 backup;
}
复制代码

按地址分配:ip_hash

upstream test {ip_hash;server localhost:8080;server localhost:8081;
}
复制代码

后端服务器的响应时间来分配:fair(第三方)

upstream backend {fair;server localhost:8080;server localhost:8081;
}
复制代码

按访问url的hash结果来分配:url_hash(第三方)

upstream backend {hash $request_uri;hash_method crc32;server localhost:8080;server localhost:8081;
}
复制代码

缓存服务

对扩展名为 gifjpgjpegpngbmpswfjscss 的图片,flashjavascriptcss 文件开启 Web 缓存,其他文件不缓存。配置文件如下:

user  www;
worker_processes  8;events {worker_connections  65535;
}http {include       mime.types;default_type  application/octet-stream;charset utf-8;log_format  main  '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_cookie" $host $request_time';sendfile       on;tcp_nopush     on;tcp_nodelay    on;keepalive_timeout  65;#要想开启nginx的缓存功能,需要添加此处的两行内容!#设置Web缓存区名称为cache_one,内存缓存空间大小为500M,缓存的数据超过1天没有被访问就自动清除;访问的缓存数据,硬盘缓存空间大小为30Gproxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;#创建缓存的时候可能生成一些临时文件存放的位置proxy_temp_path /usr/local/nginx/proxy_temp_path;fastcgi_connect_timeout 3000;fastcgi_send_timeout 3000;fastcgi_read_timeout 3000;fastcgi_buffer_size 256k;fastcgi_buffers 8 256k;fastcgi_busy_buffers_size 256k;fastcgi_temp_file_write_size 256k;fastcgi_intercept_errors on;client_header_timeout 600s;client_body_timeout 600s;client_max_body_size 100m;             client_body_buffer_size 256k;           gzip  on;gzip_min_length  1k;gzip_buffers     4 16k;gzip_http_version 1.1;gzip_comp_level 9;gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;gzip_vary on;upstream LB-WWW {ip_hash;server 192.168.1.101:80 max_fails=3 fail_timeout=30s;     #max_fails = 3 为允许失败的次数,默认值为1server 192.168.1.102:80 max_fails=3 fail_timeout=30s;     #fail_timeout = 30s 当max_fails次失败后,暂停将请求分发到该后端服务器的时间server 192.168.1.118:80 max_fails=3 fail_timeout=30s;}server {listen       80;server_name  www.wangshibo.com;index index.html index.php index.htm;root /var/www/html;access_log  /usr/local/nginx/logs/www-access.log main;error_log  /usr/local/nginx/logs/www-error.log;location / {proxy_pass http://LB-WWW;proxy_redirect off ;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#跟后端服务器连接超时时间,发起握手等候响应时间proxy_connect_timeout 300;#后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据proxy_send_timeout 300;#连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理proxy_read_timeout 600;#代理请求缓冲区,会保存用户的头信息以供nginx进行处理proxy_buffer_size 256k;#同上,告诉nginx保存单个用几个buffer最大用多少空间proxy_buffers 4 256k;#如果系统很忙时候可以申请最大的proxy_buffersproxy_busy_buffers_size 256k;#proxy缓存临时文件的大小proxy_temp_file_write_size 256k;proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;proxy_max_temp_file_size 128m;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {         #使用Web缓存区cache_one,已在nginx.conf的缓存配置中命名的。proxy_cache cache_one ;#对不同HTTP状态码缓存设置不同的缓存时间proxy_cache_valid 200 304 12h ;proxy_cache_valid 301 302 1m ;proxy_cache_valid any 1m ;#设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,#参数"组合成Keyproxy_cache_key $host$uri$is_args$args;}#用于清除缓存的url设置#假设一个URL为http://www.wangshibo.com/test.gif,那么就可以通过访问http://www.wangshibo.com/purge/test.gif清除该URL的缓存。location ~ /purge(/.*) {#设置只允许指定的IP或IP段才可以清除URL缓存allow 127.0.0.1 ;allow 192.168.0.0/16 ;deny all ;proxy_cache_purge cache_one $host$1$is_args$args ;}}
}
复制代码

简单的访问控制

denyallowngx_http_access_module 模块(已内置)中的语法。采用的是从上到下匹配方式,匹配到就跳出不再继续匹配。上述配置的意思就是,首先禁止 192.168.1.100 访问,然后允许 192.168.1.10-200 ip段内的访问(排除 192.168.1.100),同时允许 10.110.50.16 这个单独ip的访问,剩下未匹配到的全部禁止访问。实际生产中,经常和 ngx_http_geo_module 模块(可以更好地管理ip地址表,已内置)配合使用。

...
server {...location / {deny  192.168.1.100;allow 192.168.1.10/200;allow 10.110.50.16;deny  all;}
}
复制代码

图片处理

满足日常对图片的裁剪/缩放/旋转/图片品质等处理需求。要用到 ngx_http_image_filter_module 模块。这个模块是非基本模块,需要安装。 下面是图片缩放功能部分的 nginx 配置:

...
server {...# 图片缩放处理# 这里约定的图片处理url格式:以 mysite-base.com/img/路径访问location ~* /img/(.+)$ {#图片服务端储存地址alias /Users/cc/Desktop/server/static/image/$1;#图片宽度默认值set $width -;#图片高度默认值set $height -;if ($arg_width != "") {set $width $arg_width;}if ($arg_height != "") {set $height $arg_height;}#设置图片宽高image_filter resize $width $height;#设置Nginx读取图片的最大bufferimage_filter_buffer 10M;#是否开启图片图像隔行扫描image_filter_interlace on;#图片处理错误提示图,例如缩放参数不是数字error_page 415 = 415.png; }
}
复制代码

参考网站以及文章

nginx官网

Nginx与前端开发

前端想要了解的Nginx

Nginx常见使用场景-WEB服务(四)

nginx应用场景

Nginx 之六: Nginx服务器的正向及反向代理功能

nginx之正向代理

nginx的web缓存服务环境部署记录

Nginx-基础使用相关推荐

  1. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  2. nginx基础(七)

    文章目录 1. Nginx基础概述 2. Nginx安装启动 3. Nginx配置文件 4. Nginx搭建一个静态资源web服务器 5. Nginx虚拟主机 5.1 多网卡多IP的方式 5.2 基于 ...

  3. Nginx基础学习笔记(正向/反向代理,Nginx均衡负载和配置)

    目录 1. 正向代理和反向代理 1.1 正向代理 (1)什么是正向代理? (2)正向代理的特点 (3)正向代理的用途 1.2 反向代理 (1)什么是反向代理? (2)反向代理的特点 (3)反向代理的用 ...

  4. linux 安装nginx 详解教程 nginx基础命令

    目录 一.nginx 安装 二.nginx 配置 三.nginx 基础命令 1.帮助命令 2.nginx启动命令 3.查看nginx启动进程 ​4.nginx停止 5.nginx重启 ​ 6.重新加载 ...

  5. Nginx基础篇-Nginx 源码编译安装与平滑升级

    Nginx基础篇-Nginx 源码编译安装与平滑升级 Nginx官网下载地址 http://nginx.org/ 1.安装依赖包 yum -y install pcre-devel zlib-deve ...

  6. Linux nginx 基础介绍与安装版本选择

    Linux nginx 基础介绍与安装版本选择 Nginx 版本类型 Nginx yum 安装 了解 Nginx 配置文件 Nginx 编译参数详解(源码编译安装时使用) Nginx 基本配置 创建N ...

  7. Linux - nginx基础及常用操作

    目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...

  8. Nginx学习(一)——Nginx基础知识

    目录 1.Nginx学习(一)--Nginx基础知识 2.Nginx学习(二)--配置文件.反向代理与负载均衡 3.Nginx搭建HTTPS服务器 一.初试Nginx 一.下载安装 1.安装必要的一些 ...

  9. Nginx基础配置实例需求分析

    前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述.通过这些指令的合理配置,我们就可以让一台Nginx服务器正常工作,并且提供基本的web服务器功能. 接下来我们将通过一个 ...

  10. Nginx 基础(一)

    一 .Nginx简述 Nginx是一个开源.高性能.可靠的HTTP中间件.代理服务. 二 .常见的HTTP服务 1. HTTPD-Apache基金会 2. IIS-微软 3. GWS-Google 4 ...

最新文章

  1. sql获取一张表所有的字段_SQL语句19问
  2. 浅谈Spring框架注解的用法分析
  3. 咖啡馆的故事:FTP, RMI , XML-RPC, SOAP, REST一网打尽
  4. 必要商城高级UED经理张不写:设计师如何规划职业方向
  5. short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1 有错吗
  6. vscode / ubuntu 下编译和调试 C/C++ 方法
  7. HTML5怎么编辑另一个页面,html中嵌套iframe页面 如何将一个html页面中嵌入另一个html页面...
  8. 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型
  9. IntelliJ IDEA2017 激活方法 最新的
  10. iOS9适配(包括APNs)的改变
  11. nullnullicon 小图标
  12. 老王讲设计模式(八)——适配器模式
  13. krpano音量控制(我们已经转移到krpano中国网站 krpano360.com)
  14. 三维点云数据处理软件供技术原理说明_三维点云处理软件需求说明
  15. 外卖红包小程序0基础搭建附教程+源码
  16. stata怎么画分类图_Stata怎么画直方图或折线图-Stata教程
  17. OA系统四级模块编写测试用例(角色模块)
  18. java graphics颜色_在Java Graphics对象中设置背景色
  19. 苹果审核团队_如何才能跟 App Store 审核团队有效沟通?
  20. crm管理系统是什么意思 crm系统全称是什么 - whale帷幄

热门文章

  1. Python中常见的语法糖
  2. onclick如何调用含参函数_在 golang 中如何调用私有函数(绑定隐藏的标识符)
  3. java库存导出_java生成导出excle文件
  4. hexo 菜单_Hexo 搭建个人博客教程 - 6 - 设置菜单,发布博客 - 2018
  5. 12c闪回 oracle_Oracle12.1闪回功能
  6. idea改成c盘_解决IDEA占用C盘空间过大的问题
  7. python odoo_odoo开发学习 -- Python2 or Python3 ?
  8. shell如何解决mysql交互式_shell脚本与mysql交互方法汇总
  9. 道java_请问这道java里的这几个语句是什么意思
  10. 圣地亚哥的计算机科学在哪个学院,加州大学圣地亚哥分校计算机科学在哪个学院?...