一、前言

  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. 10分钟学会Python函数基础知识

    看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...

  2. Java正则表达式Pattern和Matcher类

    转载自--小鱼儿是坏蛋(原文链接) 概述 Pattern类的作用在于编译正则表达式后创建一个匹配模式.    Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配 Pattern类 ...

  3. java多线程的wait、notify/notifyAll区别

    1.wait().notify/notifyAll() 方法是Object的本地final方法,无法被重写.   2.wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized ...

  4. C语言I博客作业11

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132 我在这个课程的 ...

  5. CCNA 之 十一 NAT 子网地址转换

    NAT 网络地址转换 全称:Network Address Translation 为什么需要NAT? 因为公网IP(IPv4)地址紧缺,内容地址通过NAT转换成一个公有地址去访问公网资源: 如下图展 ...

  6. Django4模型(操作数据库)

    模型入门同步数据库的两个指令创建模型注意事项1.外键ForeignKey 模型入门 同步数据库的两个指令 python manage.py makemigrations python manage.p ...

  7. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...

  8. CF1236B Alice and the List of Presents

    题意翻译 有nn种物品和mm个背包,每种物品有无限个,现将若干个物品放到这些背包中,满足: 1.每个背包里不能出现相同种类的物品(允许有空背包): 2.在所有的mm个背包中,每种物品都出现过. 求方案 ...

  9. Charles Fiddler使用

    http://blog.devtang.com/2015/11/14/charles-introduction/ Charles 从入门到精通 http://www.infoq.com/cn/arti ...

  10. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...