保捱科技网
您的当前位置:首页Nginx安装及配置详解包括windows环境

Nginx安装及配置详解包括windows环境

来源:保捱科技网
Nginx安装及配置详解包括windows环境

nginx概述

nginx是⼀款⾃由的、开源的、⾼性能的HTTP服务器和反向代理服务器;同时也是⼀个IMAP、POP3、SMTP代理服务器;nginx可以作为⼀个HTTP服务器进⾏⽹站的发布处理,另外nginx可以作为反向代理进⾏负载均衡的实现。这⾥主要通过三个⽅⾯简单介绍nginx

反向代理负载均衡nginx特点

1. 反向代理

关于代理

说到代理,⾸先我们要明确⼀个概念,所谓代理就是⼀个代表、⼀个渠道;

此时就设计到两个⾓⾊,⼀个是被代理⾓⾊,⼀个是⽬标⾓⾊,被代理⾓⾊通过这个代理访问⽬标⾓⾊完成⼀些任务的过程称为代理操作过程;如同⽣活中的专卖店~客⼈到adidas专卖店买了⼀双鞋,这个专卖店就是代理,被代理⾓⾊就是adidas⼚家,⽬标⾓⾊就是⽤户

正向代理

说反向代理之前,我们先看看正向代理,正向代理也是⼤家最常接触的到的代理模式,我们会从两个⽅⾯来说关于正向代理的处理模式,分别从软件⽅⾯和⽣活⽅⾯来解释⼀下什么叫正向代理

在如今的⽹络环境下,我们如果由于技术需要要去访问国外的某些⽹站,此时你会发现位于国外的某⽹站我们通过浏览器是没有办法访问的,此时⼤家可能都会⽤⼀个操作FQ进⾏访问,FQ的⽅式主要是找到⼀个可以访问国外⽹站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的⽹站,然后将访问到的数据传递给我们!上述这样的代理模式称为正向代理,正向代理最⼤的特点是客户端⾮常明确要访问的服务器地址;服务器只清楚请求来⾃哪个代理服务器,⽽不清楚来⾃哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

反向代理

明⽩了什么是正向代理,我们继续看关于反向代理的处理⽅式,举例如我⼤天朝的某宝⽹站,每天同时连接到⽹站的访问⼈数已经爆表,单个服务器远远不能满⾜⼈民⽇益增长的购买欲望了,此时就出现了⼀个⼤家⽿熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问⼈数的问题;某宝⽹站中⼤部分功能也是直接使⽤nginx进⾏反向代理实现的,并且通过封装nginx和其他的组件之后起了个⾼⼤上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官⽹查看具体的信息:

那么反向代理具体是通过什么样的⽅式实现的分布式的集群操作呢,我们先看⼀个⽰意图:

通过上述的图解⼤家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照⼀定的规则分发给了后端的业务处理服务器进⾏处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是⼀个反向代理⾓⾊反向代理,主要⽤于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!项⽬场景

通常情况下,我们在实际项⽬操作时,正向代理和反向代理很有可能会存在在⼀个应⽤场景中,正向代理代理客户端的请求去访问⽬标服务器,⽬标服务器是⼀个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下:

2. 负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,nginx扮演了反向代理服务器的⾓⾊,它是以依据什么样的规则进⾏请求分发的呢?不⽤的项⽬应⽤场景,分发的规则是否可以控制呢?

这⾥提到的客户端发送的、nginx反向代理服务器接收到的请求数量,就是我们说的负载量请求数量按照⼀定的规则进⾏分发到不同的服务器处理的规则,就是⼀种均衡规则所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项⽬操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较⾼,但是数据的稳定性安全性等等有

⾮常好的保障,如中国移动中国联通这样的公司才会选择硬负载进⾏操作;更多的公司考虑到成本原因,会选择使⽤软件负载均衡,软件负载均衡是利⽤现有的技术结合主机硬件实现的⼀种消息队列分发机制

nginx⽀持的负载均衡调度算法⽅式如下:

1. weight轮询(默认):接收到的请求按照顺序逐⼀分配到不同的后端服务器,即使在使⽤过程中,某⼀台后端服务器宕机,nginx会⾃动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种⽅式下,可以给不同的后端服务器设置⼀个权重值(weight),⽤于调整不同的服务器上请求的分配率;权重数据越⼤,被分配到请求的⼏率越⼤;该权重值,主要是针对实际⼯作环境中不同的后端服务器硬件配置进⾏调整的。2. ip_hash:每个请求按照发起客户端的ip的hash结果进⾏匹配,这样的算法下⼀个固定ip地址的客户端总会访问到同⼀个后端服务器,这也在⼀定程度上解决了集群部署环境下session共享的问题。3. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进⾏均衡分配,响应时间短处理效率⾼的服务器分配到请求的概率⾼,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的⼀种调度算法。但是需要注意的是nginx默认不⽀持fair算法,如果要使⽤这种调度算法,请安装upstream_fair模块4. url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提⾼缓存效率。同样要注意nginx默认不⽀持这种调度算法,要使⽤的话需要安装nginx的hash软件包

Nginx安装

1. windows安装

官⽅⽹站下载地址:

https://nginx.org/en/download.html

如下图所⽰,下载对应的版本的nginx压缩包,解压到⾃⼰电脑上存放软件的⽂件夹中即可

解压完成后,⽂件⽬录结构如下:

启动nginx

1) 直接双击该⽬录下的nginx.exe,即可启动nginx服务器

2) 命令⾏计⼊该⽂件夹,执⾏nginx命令,也会直接启动nginx服务器

D:/resp_application/nginx-1.13.5> nginx

访问nginx

打开浏览器,输⼊地址:成功

停⽌nginx

命令⾏进⼊nginx根⽬录,执⾏如下命令,停⽌服务器:

# 强制停⽌nginx服务器,如果有未处理的数据,丢弃D:/resp_application/nginx-1.13.5> nginx -s stop

# 优雅的停⽌nginx服务器,如果有未处理的数据,等待处理完成之后停⽌D:/resp_application/nginx-1.13.5> nginx -s quit

2. ubuntu安装

按照正常软件的安装⽅式,直接通过如下命令进⾏安装:

$ sudo apt-get install nginx

安装完成即可,在/usr/sbin/⽬录下是nginx命令所在⽬录,在/etc/nginx/⽬录下是nginx所有的配置⽂件,⽤于配置nginx服务器以及负载均衡等信息

查看nginx进程是否启动$ ps -ef|grep nginx

nginx会⾃动根据当前主机的CPU的内核数⽬创建对应的进程数量(当前ubuntu主机是2核4线程配置)

备注:这⾥启动的服务进程其实是4个进程,因为nginx进程在启动的时候,会附带⼀个守护进程,⽤于保护正式进程不被异常终⽌;如果守护进程⼀旦返现nginx继承被终⽌了,会⾃动重启该进程。

守护进程⼀般会称为master进程,业务进程被称为worker进程

启动nginx服务器命令

直接执⾏nginx会按照默认的配置⽂件进⾏服务器的启动

$ nginx

停⽌nginx服务命令

和windows系统执⾏过程⼀样,两种停⽌⽅式

$ nginx -s stopor

$ nginx -s quit

重新启动加载

同样也可以使⽤命令reopen和reload来重新启动nginx或者重新加载配合着⽂件。

nginx配置

nginx是⼀个功能⾮常强⼤的web服务器加反向代理服务器,同时⼜是邮件服务器等等在项⽬使⽤中,使⽤最多的三个核⼼功能是反向代理、负载均衡和静态服务器

这三个不同的功能的使⽤,都跟nginx的配置密切相关,nginx服务器的配置信息主要集中在nginx.conf这个配置⽂件中,并且所有的可配置选项⼤致分为以下⼏个部分

main # 全局配置

events { # nginx⼯作模式配置}

http { # http设置 ....

server { # 服务器主机配置 ....

location { # 路由配置 .... }

location path { .... }

location otherpath { .... } } server { .... location { .... } }

upstream name { # 负载均衡配置 .... }}

如上述配置⽂件所⽰,主要由6个部分组成:1. main:⽤于进⾏nginx全局信息的配置2. events:⽤于nginx⼯作模式的配置3. http:⽤于进⾏http协议信息的⼀些配置4. server:⽤于进⾏服务器访问信息的配置5. location:⽤于进⾏访问路由的配置6. upstream:⽤于进⾏负载均衡的配置

main模块

观察下⾯的配置代码

# user nobody nobody;worker_processes 2;# error_log logs/error.log

# error_log logs/error.log notice# error_log logs/error.log info# pid logs/nginx.pid

worker_rlimit_nofile 1024;

上述配置都是存放在main全局配置模块中的配置项

user⽤来指定nginx worker进程运⾏⽤户以及⽤户组,默认nobody账号运⾏

worker_processes指定nginx要开启的⼦进程数量,运⾏过程中监控每个进程消耗内存(⼀般⼏M~⼏⼗M不等)根据实际情况进⾏调整,通常数量是CPU内核数量的整数倍error_log定义错误⽇志⽂件的位置及输出级别【debug / info / notice / warn / error / crit】pid⽤来指定进程id的存储⽂件的位置

worker_rlimit_nofile⽤于指定⼀个进程可以打开最多⽂件数量的描述

event 模块

上⼲货

event {

worker_connections 1024; multi_accept on; use epoll;}

上述配置是针对nginx服务器的⼯作模式的⼀些操作配置

worker_connections 指定最⼤可以同时接收的连接数量,这⾥⼀定要注意,最⼤连接数量是和worker processes共同决定的。multi_accept 配置指定nginx在收到⼀个新连接通知后尽可能多的接受更多的连接

use epoll 配置指定了线程轮询的⽅法,如果是linux2.6+,使⽤epoll,如果是BSD如Mac请使⽤Kqueue

http模块

作为web服务器,http模块是nginx最核⼼的⼀个模块,配置项也是⽐较多的,项⽬中会设置到很多的实际业务场景,需要根据硬件信息进⾏适当的配置,常规情况下,使⽤默认配置即可!

http { ##

# 基础配置 ##

sendfile on; tcp_nopush on; tcp_nodelay on;

keepalive_timeout 65;

types_hash_max_size 2048; # server_tokens off;

# server_names_hash_bucket_size ; # server_name_in_redirect off; include /etc/nginx/mime.types;

default_type application/octet-stream; ##

# SSL证书配置 ##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ##

# ⽇志配置 ##

access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ##

# Gzip 压缩配置 ##

gzip on;

gzip_disable \"msie6\";

# gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1;

# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ##

# 虚拟主机配置 ##

include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;

1) 基础配置

sendfile on:配置on让sendfile发挥作⽤,将⽂件的回写过程交给数据缓冲去去完成,⽽不是放在应⽤中完成,这样的话在性能提升有有好处tc_nopush on:让nginx在⼀个数据包中发送所有的头⽂件,⽽不是⼀个⼀个单独发

tcp_nodelay on:让nginx不要缓存数据,⽽是⼀段⼀段发送,如果数据的传输有实时性的要求的话可以配置它,发送完⼀⼩段数据就⽴刻能得到返回值,但是不要滥⽤哦keepalive_timeout 10:给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。⼀般设置时间较短,可以让nginx⼯作持续性更好client_header_timeout 10:设置请求头的超时时间client_body_timeout 10:设置请求体的超时时间

send_timeout 10:指定客户端响应超时时间,如果客户端两次操作间隔超过这个时间,服务器就会关闭这个链接limit_conn_zone $binary_remote_addr zone=addr:5m :设置⽤于保存各种key的共享内存的参数,limit_conn addr 100: 给定的key设置最⼤连接数

server_tokens:虽然不会让nginx执⾏速度更快,但是可以在错误页⾯关闭nginx版本提⽰,对于⽹站安全性的提升有好处哦include /etc/nginx/mime.types:指定在当前⽂件中包含另⼀个⽂件的指令

default_type application/octet-stream:指定默认处理的⽂件类型可以是⼆进制

type_hash_max_size 2048:混淆数据,影响三列冲突率,值越⼤消耗内存越多,散列key冲突率会降低,检索速度更快;值越⼩key,占⽤内存较少,冲突率越⾼,检索速度变慢

2) ⽇志配置

access_log logs/access.log:设置存储访问记录的⽇志error_log logs/error.log:设置存储记录错误发⽣的⽇志

3) SSL证书加密

ssl_protocols:指令⽤于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地⽅在⽤但有不少被攻击的漏洞。ssl prefer server ciphers:设置协商加密算法时,优先使⽤我们服务端的加密套件,⽽不是客户端浏览器的加密套件

4) 压缩配置

gzip 是告诉nginx采⽤gzip压缩的形式发送数据。这将会减少我们发送的数据量。

gzip_disable 为指定的客户端禁⽤gzip功能。我们设置成IE6或者更低版本以使我们的⽅案能够⼴泛兼容。

gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的⽂件(在这个例⼦中被注释掉了),从⽽允许你使⽤最⾼压缩⽐,这样nginx就不⽤再压缩这些⽂件了(想要更详尽的gzip_static的信息,请点击这⾥gzip_proxied 允许或者禁⽌压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。

gzip_min_length 设置对数据启⽤压缩的最少字节数。如果⼀个请求⼩于1000字节,我们最好不要压缩它,因为压缩这些⼩的数据会降低处理此请求的所有进程的速度。gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩⽐最⼤的。我们设置为4,这是⼀个⽐较折中的设置。gzip_type 设置需要压缩的数据格式。上⾯例⼦中已经有⼀些了,你也可以再添加更多的格式。

5) ⽂件缓存配置

open_file_cache 打开缓存的同时也指定了缓存最⼤数⽬,以及缓存的时间。我们可以设置⼀个相对⾼的最⼤时间,这样我们可以在它们不活动超过20秒后清除掉。open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。

open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间⾥最⼩的⽂件数。

open_file_cache_errors 指定了当搜索⼀个⽂件时是否缓存错误信息,也包括再次给配置中添加⽂件。我们也包括了服务器模块,这些是在不同⽂件中定义的。如果你的服务器模块不在这些位置,你就得修改这⼀⾏来指定正确的位置。

server模块

srever模块配置是http模块中的⼀个⼦模块,⽤来定义⼀个虚拟访问主机,也就是⼀个虚拟服务器的配置信息

server {

listen 80;

server_name localhost 192.168.1.100; root /nginx/www;

index index.php index.html index.html; charset utf-8;

access_log logs/access.log; error_log logs/error.log; ......}

核⼼配置信息如下:

server:⼀个虚拟主机的配置,⼀个http中可以配置多个serverserver_name:⽤⼒啊指定ip地址或者域名,多个配置之间⽤空格分隔root:表⽰整个server虚拟主机内的根⽬录,所有当前主机中web项⽬的根⽬录index:⽤户访问web⽹站时的全局⾸页

charset:⽤于设置www/路径中配置的⽹页的默认编码格式

access_log:⽤于指定该虚拟主机服务器中的访问记录⽇志存放路径error_log:⽤于指定该虚拟主机服务器中访问错误⽇志的存放路径

location模块

location模块是nginx配置中出现最多的⼀个配置,主要⽤于配置路由访问信息

在路由访问信息配置中关联到反向代理、负载均衡等等各项功能,所以location模块也是⼀个⾮常重要的配置模块基本配置

location / {

root /nginx/www;

index index.php index.html index.htm;}

location /:表⽰匹配访问根⽬录

root:⽤于指定访问根⽬录时,访问虚拟主机的web⽬录index:在不指定访问具体资源时,默认展⽰的资源⽂件列表反向代理配置⽅式

通过反向代理代理服务器访问模式,通过proxy_set配置让客户端访问透明化

location / {

proxy_pass http://localhost:8888;

proxy_set_header X-real-ip $remote_addr; proxy_set_header Host $http_host;}

uwsgi配置

wsgi模式下的服务器配置访问⽅式

location / {

include uwsgi_params; uwsgi_pass localhost:8888}

upstream模块

upstream模块主要负责负载均衡的配置,通过默认的轮询调度⽅式来分发请求到后端服务器简单的配置⽅式如下

upstream name { ip_hash;

server 192.168.1.100:8000;

server 192.168.1.100:8001 down;

server 192.168.1.100:8002 max_fails=3; server 192.168.1.100:8003 fail_timeout=20s;

server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;}

核⼼配置信息如下

ip_hash:指定请求调度算法,默认是weight权重轮询调度,可以指定server host:port:分发服务器的列表配置-- down:表⽰该主机暂停服务

-- max_fails:表⽰失败最⼤次数,超过失败最⼤次数暂停服务

-- fail_timeout:表⽰如果请求受理失败,暂停指定的时间之后重新发起请求

windows下nginx的安装及使⽤⽅法⼊门

nginx功能之⼀可以启动⼀个本地服务器,通过配置server_name和root⽬录等来访问⽬标⽂件⼀. 下载

下载后解压

⼆. 修改配置⽂件

nginx配置⽂件在 nginx-1.8.0\\conf\\nginx.conf

http {

gzip on; #静态⽂件 server {

listen 80;

server_name static.cnblog.com; location / {

root G:/source/static_cnblog_com; } }

#html⽂件 server {

listen 80;

server_name 127.0.0.1 localhost; location / {

root G:/source/html/mobile/dist; index index.html index.htm; } }}

如上图可以配置多个server,这样访问localhost即访问到了 G:/source/html/mobile/dist ⽬录, 还可以开启gzip,压缩html

三. 启动

注意不要直接双击nginx.exe,这样会导致修改配置后重启、停⽌nginx⽆效,需要⼿动关闭任务管理器内的所有nginx进程

在nginx.exe⽬录,打开命令⾏⼯具,⽤命令 启动/关闭/重启nginx

start nginx : 启动nginx

nginx -s reload :修改配置后重新加载⽣效nginx -s reopen :重新打开⽇志⽂件

nginx -t -c /path/to/nginx.conf 测试nginx配置⽂件是否正确关闭nginx:

nginx -s stop :快速停⽌nginx

nginx -s quit :完整有序的停⽌nginx

如果遇到报错:

bash: nginx: command not found

有可能是你再linux命令⾏环境下运⾏了windows命令,如果你之前是允许 nginx -s reload报错, 试下 ./nginx -s reload或者 ⽤windows系统⾃带命令⾏⼯具运⾏

因篇幅问题不能全部显示,请点此查看更多更全内容