一、前言

  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. css三大特效之层叠性

    css三大特效之层叠性

  2. 北冥'sfish

    北冥咸鱼,其名为鲲.鲲之大,long long存不下.化而为鸟,其名为鹏.鹏之背,高精被卡废.怒而颓,其码若怪诞之吟.是咸鱼,颓废则将遇上cz.cz谁,大佬也.<大佬说>者,志奆者也.&l ...

  3. 在linux和windows中使用selenium

     在linux和windows中使用selenium 一. selenium(浏览的人你们多大呀?是AI?) selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法 ...

  4. LESSON 1-Introduction

    Keywords: Communication system, Channel model, Channel capacity by Shannon 1. Two fundamental archit ...

  5. C#使用Consul集群进行服务注册与发现

    前言 我个人觉得,中间件的部署与使用是非常难记忆的:也就是说,如果两次使用中间件的时间间隔比较长,那基本上等于要重新学习使用. 所以,我觉得学习中间件的文章,越详细越好:因为,这对作者而言也是一份珍贵 ...

  6. builtins内建模块

    builtins模块 为啥我们没有导入任何模块就能使用len(),str(),print()...等这么多的函数? 其实在我们运行python解释器的时候,他会自动导入一些模块,这些函数就是从这些地方 ...

  7. MySQL 库、表、记录、相关操作(3)

    MySQL 库.表.记录.相关操作(3) 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[, ..., 字段n])] values (数 ...

  8. VUE+DRF系列

    vue基础系列 001 路飞学诚项目简介 002 Vue简介 003 Vue引入 004 文本指令 005 事件指令 006 斗篷指令 007 属性指令 008 表单指令 009 条件指令 010 路 ...

  9. java多线程与线程池

    1. 场景描述 以前多线程也常用,这次因需再页面上用到多线程,如下图,总结下,有需要的朋友可以参考下. 2. 解决方案 2.1 线程池概念 线程池官方定义不说了,通俗说下:池子的概念,事先(预定义)创 ...

  10. nginx、redis在Centos7中,加入开机自启动

    nginx加入开机启动 cat <<EOF >> /etc/systemd/system/nginx.service> [Unit]> Description=ng ...