一、前言

  Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日。是一款轻量型的Web服务器,其特点是占有内存少,并发能力强,对负载均衡等提供了非常方便的配置。国内几大互联网公司也都在使用,很火,很强大,现在就让我们来领略它的风采。

二、Nginx环境配置与安装

  2.1 windows 上配置 nginx

  下载地址:http://nginx.org/en/download.html

  

  下载最新稳定版即可,当前为1.16.1。Mainline version属于开发版本。下载后解压即可使用,纯绿色,结构如下图:

  

  双击 nginx.exe 感觉闪动一下,任务管理器中查看进程,会出现两个nginx进程,官方说明是:其中一个进程为主进程,另一个进程为工作进程。

  如果未启动,可在错误日志中(logs\error.log)查看原因。如果没有日志信息,需要在windows事件日志中查看原因。一般都是端口占用,或配置文件错误导致。

  也可以通过windows控制台,用以下命令对nginx进行管理(路径要切换到nginx所在目录)。 

 start nginx       //启动服务(不会出现双进程)
nginx -s stop //快速停止服务(强制关闭)
nginx -s quit //退出服务
nginx -s reload //重新加载(使用新配置重载服务,类似重启)
nginx -s reopen //日志分割(开启一个新的日志文件)
nginx -t //验证配置文件是否正确

  由于是绿色的,基本身也不是为 windows 而写,Nginx 并未对 Windows 提供服务支持。要想做为服务运行,需要借助一个小工具WSW(Windows Service Wrapper)来进行,非关注重点,这里就不细说了。

  2.2 linux 安装 nginx(以CentOS 7 为例)

  (1) 这里使用EPEL安装(快捷,方便),需要首先安装EPEL仓库,打开终端输入以下命令

sudo yum install epel-release

  (2) 安装 nginx,输入安装命令,提示时,回答yes。

sudo yum install nginx

  (3) 启动 nginx

sudo systemctl start nginx

  浏览器(需要centos有安装界面)上输入localhost,看到下图(用epel安装,就是这张图),表示安装成功了。

  如果想外网访问,并且系统有运行防火墙,需要添加 http 和 https 允许通信才可以。可以运行以下命令:

 sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

  设置系统启动时启动 nginx 服务,运行下命令即可

sudo systemctl enable nginx

  到这里就算是搞定了,Nginx 默认安装路径为 /etc/nginx

三、Nginx 反向代理服务配置

  以下操作说明,为了方便,都是以windows下为例的。配置文件是在Nginx根目录中,conf 目录下的 nginx.conf 文件。

  先来说说网站的事情吧,nginx安装成功后,打开的页面,就相当于可以打开一个站了,是nginx默认配置好的。默认的是只有一个站,像一些虚拟主机(非虚拟机),即一台服务器有多个网站。要实现这个功能,在 nginx 配置也是很简单的。

  由于用了同一主机名(都是本地,用的localhost),需要使用不同的端口号,只需要在http模块中,再加入一条 server 项即可,配置如下:

 server {    #这里是默认的server的部分内容,只展示主要的的内容。
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#此处省略N项
}
# 我们自己定义一个server项,这里复制一个nginx根目录中的 html 目录到当前目录,重命名为 html1。
# 修改 html1 中的 index.html 中的h1的内容为 welcome to nginx 1!
server {
listen 8090;
location / {
root html1;
index index.html;
}
}

  重新启动下nginx服务,分别访问 localhost、localhost:8090 即可看到效果。

  ========================= 50个等号的华丽分割线 =========================

  这里进入正题,看看反向代理是如何配置的,挺简单的,一行配置就搞定了,看配置。

server {
listen 80;
server_name localhost;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://localhost:8090; #加入这个配置即可,上面两项要注释掉。
}
}

  这里直接配置为反向代理上一步中的端口 8090 的站,看一下效果试试。记得要重启 nginx 服务(方便演示,其它的网站也是可以的)

  你没看错,就是这么简单的搞定了。HAHA..

四、Nginx 负载均衡配置

  负载均衡,Nginx 常用核心功能之一。配置负载均衡,需要用到 upstream 项的配置,废话先不说,直接看配置,如下:  

 upstream myapp {
server localhost:8090;
server localhost:8080;
server localhost:8070;
} server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myapp; #同样用这个配置,指向 upstream 项后面的名称,可自已定义。
}
} # 多定义几个 server 用于负载测试。便于演示,都在一台机上实现了,实际工作中是不可能这样的。
server {
listen 8090;
location / {
root html1;
#index index.html; #可以不指定,默认就是index.html或index.htm
}
} server {
listen 8080;
location / {
root html2; #nginx 小手一抖,根目录多复制份,改下index.html内容,要有所区别
index index.html;
}
} server {
listen 8070;
location / {
root html3;
index index.html;
}
}

  重启 nginx 服务,访问 localhost ,多刷新几次,看看效果,是不是每次访问都在改变。这就是最基本的负载算法:轮询算法

  1.轮询算法:每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。

  2.权重算法:通过配置权重,指定轮询机率,权重越大,访问的机率越大。直接在upstream中配置,加在相关服务后面即可,如下:

 upstream myapp {
server localhost:8090 weight=6;
server localhost:8080;
server localhost:8070;
}

  3.ip_哈希算法:请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个应用服务器,主要用于解决session共享的问题,其配置如下:

 upstream myapp {
ip_hash;
server localhost:8090;
server localhost:8080;
server localhost:8070;
}

  4.最少链接:请求转发给连接数较少的应用服务器,能够达到更好的负载均衡效果,就是遍历后端集群,比较每个应用服务的conns/weight,选取该值最小的。其配置如下: 

 upstream myapp {
least_conn;
server localhost:8090;
server localhost:8080;
server localhost:8070;
}

  通过在 upstream 参数中配置不同的选项,可实现不同功能与效果,比如不让某台应用服务参与负载,可配置如下:

 upstream myapp {
server localhost:8090;
server localhost:8080;
server localhost:8070 down;
}

  应用服务器后面加上 down 即表示当前的 server 不参与负载。就不会访问这么服务器了。各配置项与功能如下:

  a. weight

    -权重,即weight越大,负载的权重就越大。

  b. down

    -表示当前 server 暂时不参与负载。

  c. max_fails

    -充许请求失败的次数,默认为1。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。

  d. fail_timeout

    -max_fails 次失败后,暂停的时间。

  e. backup

    -其它所有非backup服务器 down 或者忙的时候,请求 backup 服务器。基本上这台服务器压力最轻。

五、各模块配置说明

  主要说明下全局配置,events 模块 和 http 模块。

  全局配置

 #user  nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid;
  • user  指定nginx worker进程运行用户以及用户组,默认 nobody 账号运行。
  • worker_processes 指定nginx开启的子进程数量。在linux中,这个默认值是 auto。可根据情况调整。
  • error_log 定义错误日志文件的位置及输出级别(debug / info / notice / warn / error / crit)。默认为crit。
  • pid 指定进程id的存储文件位置。

  events 模块

 events {
worker_connections 1024;
}
  • worker_connections 最大可以同时接收的连接数量。值得注意的是,最大连接数量是和 worker_processes 共同决定的。

 

  http模块,这里只说明子模块 server 中的常用配置。upstream 上面说负载均衡时已有说明。

 server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
#proxy_pass http://localhost:8080;
#proxy_pass http://myapp;
}
}
  • server 一个虚拟主机的配置,一个 http 中可以配置多个 server。
  • listen 侦听的端口号
  • server_name 主机名,可以是ip地址或者域名,多个配置之间用空格分隔。
  • charset 用于设置 location/root 站点的默认编码格式。
  • access_log 指定该虚拟主机服务器中的访问记录日志存放路径。
  • location 一个非常重要的模块,用于配置路由访问信息。会关联到反向代理,负载均衡等各项功能。
    • root 指定web访问的根目录
    • index 未指定访问具体资源时,默认展示的文件列表
    • proxy_pass 为反向代理的配置,包括负载均衡指向 upstream 模块。

  最后,在单独说下 location 这个模块,而且它本身是支持正则的,比如一些静态资源的访问配置,就是通过这里实现的。

  location /  即是指匹配访问根目。

  location location ~ \.(gif|jpg|png)$ 图片静态资源的匹配,可以指定图片所在目录: 

 location ~ \.(gif|jpg|png)$ {
root data/images;
}

  location ~\.(css|js)$  匹配css,js文件。一般在做反向代理时,会出现css,js文件无法加载,就可以用到这个:

 location ~\.(css|js)$ {
proxy_pass http://localhost:809;
}   

  指定错误页,也是用的这个

 error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

六、结语

  就说到这里了,只介绍了一些常用的功能及配置,一般情况下也够用了,Nginx 小而精悍,功能也远不止这些,有兴趣的同学,可以深入研究。

Nginx 安装、配置及相关介绍的更多相关文章

  1. Nginx安装配置PHP(FastCGI)环境的教程

    这篇是Nginx安装配置PHP(FastCGI)环境的教程.Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用. 一.什么是 FastCGI F ...

  2. Nginx安装配置与HelloWorld

    <深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld 最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码 ...

  3. Nginx 安装 配置 使用

    Nginx 安装 配置 使用 基本的HTTP服务器特性 处理静态文件,索引文件以及自动索引:打开文件描述符缓存(缓存元数据和文件描述符,下一次可以直接从内存找到数据或者文件的位置): 使用缓存加速反向 ...

  4. VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三)

    首先启动Nginx 1. 相关浏览 两个 Tomcat 配置:  VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二) Nginx 安装配置启动: VMware Linu ...

  5. VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二)

    准备工作 相关浏览: VMware Linux 下 Nginx 安装配置 (一) 1. 选在 /usr/local/ 下创建 softs 文件夹,通过 ftp 命令 把 apache-tomcat-7 ...

  6. nginx安装配置_runoob_阅读笔记_20190917

    Nginx 安装配置_runoob菜鸟教程 Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向 ...

  7. Nginx安装配置(转)

    Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/ ...

  8. Hearbeat + Nginx 安装配置

    Hearbeat + Nginx 安装配置 实验环境 两台主机:Linux Centos 6.5 32位 主 服务端:Hearbeat + Nginx eth0:192.168.1.160(公网) e ...

  9. Nginx安装配置|Nginx反向代理|Nginx支持HTTPS|Nginx重定向

    Nginx安装配置 可以直接看到最下面的HTTPS. Nginx安装 我的系统如下: No LSB modules are available. Distributor ID: Ubuntu Desc ...

  10. puppet 3+Unicorn+Nginx安装配置

    puppet 3+Unicorn+Nginx安装配置 2014-08-15 10:58 酒瓶不倒 酒瓶不倒的博客 字号:T | T 一键收藏,随时查看,分享好友! Unicorn 效率要比 Webri ...

随机推荐

  1. java中sleep()和wait()区别

    1,sleep方法是Thread类的静态方法,wait()是Object超类的成员方法 2,sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时 ...

  2. 【Android - IPC】之Serializable和Parcelable序列化

    1.序列化的目的 (1)永久的保存对象数据(将对象数据保存到文件或磁盘中): (2)通过序列化操作将对象数据在网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的,因此序列化的目的是将对象数据 ...

  3. python 3 mro

    __mro__ 1.只有在python2中才分新式类和经典类,python3中统一都是新式类 2.在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类 3.在python2 ...

  4. shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

    7月12日任务 20.5 shell脚本中的逻辑判断20.6 文件目录属性判断20.7 if特殊用法20.8/20.9 case判断 20.5 shell脚本中的逻辑判断 逻辑判断在shell中随处可 ...

  5. SDWebImage学习之 NSCache

    1.使用SDWebImage的好处 1.异步下载(避免主线程卡死) 2.做好图片缓存(这样就不需要每次都加载网络图片) 3.解决了循环利用的问题 很容易造成内存警告

  6. OpenCV图像识别初探-50行代码教机器玩2D游戏【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  7. AI:为你写诗,为你做不可能的事

    最近,一档全程高能的神仙节目,高调地杀入了我们的视野: 没错,就是撒贝宁主持,董卿.康辉等央视名嘴作为评审嘉宾,同时集齐央视"三大名嘴"同台的央视<主持人大赛>,这够不 ...

  8. [Abp vNext 源码分析] - 13. 本地事件总线与分布式事件总线 (Rabbit MQ)

    一.简要介绍 ABP vNext 封装了两种事件总线结构,第一种是 ABP vNext 自己实现的本地事件总线,这种事件总线无法跨项目发布和订阅.第二种则是分布式事件总线,ABP vNext 自己封装 ...

  9. 关于TC297的Flash写入之前是否需要先擦除的问题

    通过实际测试,对TC297 Flash的一个地址空间可以重复执行写入操作(program),而不需要先对该区域所在扇区进行擦除. MPC5675K则需要在写入之前进行擦除.

  10. luogu P1901 发射站

    题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接 ...