Nginx服务器


1、简介

Nginx(engine x)是一个高性能的HTTP服务器和反向代理服务器。Nginx是一种服务器软件,其最主要,最基本的功能是可以和服务器硬件结合,让程序员可以将程序发布在Nginx服务器上,让成千上万的用户可以浏览。

除此之外,Nginx还是一种高性能的HTTP和反向代理服务器,同时也是一个代理邮件服务器。也就是说,我们在Nginx上可以:可以发布网站,可以实现负载均衡,可以作为邮件服务器实现收发有点等功能。

2、什么是代理

不论是正向还是反向,代理服务器是用户和服务器之间的中介,完成用户请求和结果的转发。

2.1、正向代理

正向代理服务器的作用是,让用户可以通过该服务器,访问其它的服务器上,过程就是:让代理服务器代理我们发出访问请求,同时接收访问结果并返回给我们。就好比,张三人在广州,需要去北京XX机构办理业务,但是又有事无法脱身,李四在北京,此时就可以让李四代理他起办理业务,此时李四就是正向代理,XX机构就是服务器。

2.2、反向代理

那反向代理呢?由于种种原因(如,安全问题),不能直接暴露于网络之上。这个时候,他们就需要一个代理人,这个代理人直接暴露在外部网络上,可以供他人访问到。至于业务请求,就需要代理人来访问内部服务器了。这种情况下,除了代理服务器,其他人并不知道内部服务器的所在位置,也就没有方法直接访问到内部服务器。就好比,你去书店买书,想要买一本《C++ Primer》,书店老板不会让你直接进书店里拿,而是书店老板找给你,此时书店老板就是反向代理,书店就是服务器。(正向反向是相对于用户而言的,代理用户就是正向,代理服务器就是反向)

2.3、区别

(1)、正向代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过正向代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。

(2)、正向代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过正向代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后由反向代理发往内部服务器。

3、Nginx服务器的优点

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。为什么它这么受欢迎呢?介绍一下它的优点就知道了。

  1. 占用内存少,并发能力强。事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,能够支持高达50,000个并发连接数的响应。
  2. Nginx可以在大多数UnixLinux OS上编译运行,并有Windows移植版。
  3. Nginx作为负载均衡服务:Nginx既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务对外进行服务。
  4. 服务器采用C进行编写,不论是系统资源开销还是CPU使用效率都比Perbal要好很多。
  5. 模块化的结构。包括gzipping,byte ranges,chunked responses,以及SSl-filter等filter。如果由FastCG或其它代理服务器处理单页中存在的多个SSl,,则这项处理可以并行运行,而不需要相互等待。
  6. Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级
  7. 等待,还有好多优点,足以证明Nginx是一款非常优秀的服务器。

4、Nginx负载均衡

所谓的负载均衡是指,当同时有多个用户访问我们的服务器的时候,为了减轻服务器的压力,我们需要将用户引入服务器集群中的较轻塔里的服务器,分担较重服务器的负担。

Nginx支持的负载均衡调度算法方式如下:

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

5、Nginx部署(Windows环境下)

1 进入http://nginx.org/网站,下载nginx-1.13.8.zip文件,并将其解压到要安装的位置,安装即完成;
2 启动方式:进入CMD模式,并切换到Nginx安装文件所在的目录,用start nginx命令,启动Nginx服务器;

3 用nginx -s reload命令,重新启动Nginx服务器;

4 用nginx -s stop命令,停止Nginx服务器;

5 发布项目。

5.1 项目部署方式:在这里给大家介绍两种最简单的方式,默认方式和配置文件方式:

方式1:默认方式:

将项目中所有文件复制到nginx/html目录中,启动即可(静态页面)

方式2:配置文件方式

修改配置文件中root部分的路径,启动即可。

5.2 项目发布路径配置

打开conf/nginx.conf文件,修改server段的内容:
server {
listen 80;
server_name localhost;
location / {
root 项目的路径;
index index.html index.htm;
}
}

核心解释如下:
Nginx服务器监听localhost:80的请求,
root表示项目的根目录,例如 D:\ws\dayxx
index表示项目中的默认首页是index.html或者是index.htm,Nginx自动访问默认首页
核心解释如下:
Nginx服务器监听localhost:80的请求,
root表示项目的根目录,例如 D:\ws\dayxx
index表示项目中的默认首页是index.html或者是index.htm,Nginx自动访问默认首页

6、Nginx部署(Linux环境下)

下面介绍linux下如何安装和使用nginx.

1下载Nginx 进入http://nginx.org/网站,下载nginx-1.13.9.tar.gz文件。

2上传Nginx到Linux的root目录下。

3 Nginx是C语言开发,建议在Linux上运行,安装Nginx需要先将官网下载的源码进行编译,编译依赖gcc环境;所以需要安装gcc。安装gcc:yum install gcc-c++

4 安装Nginx依赖环境,

yum -y install pcre pcre-devel

yum -y install zlib zlib-devel

yum -y install openssl openssl-devel

5 解压,并进入解压文件夹

tar -xvf nginx-1.13.9.tar.gz -C/usr/local

cd /usr/local/nginx-1.13.9

6 编译并安装

1 ./configure 2 make 3 make install

7 启动Nginx

进入nginx的sbin目录
cd /usr/local/nginx/sbin
在sbin目录下启动 ./nginx
在sbin目录下停止 ./nginx -s stop
在sbin目录下重写加载 ./nginx -s reload
开放linux的对外访问的端口80,在默认情况下,Linux不会开放80端口号
firewall-cmd --zone=public --add-port=80/tcp --permanent
查看是否有nginx的线程是否存在 ps -ef | grep nginx

配置文件为:/usr/local/nginx/conf/nginx-conf,和在windows上的配置文件一样,修改完成之后,就可以访问网页了.

7、反向代理(Linux环境下)

步骤1:编辑配置文件nginx.conf(vim nginx.conf) 增加或修改如下内容: 
#增加反向代理tomcat
upstream test{server localhost:8080;}
server {
listen 80;
server_name localhost;
location / {
# root html;
index index.html index.htm;
# 访问tomcat
proxy_pass http://test;
}
}

修改后的配置文件为:

#增加反向代理tomcat
upstream test{server localhost:8080;}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# root html;
index index.html index.htm;
# 访问tomcat
proxy_pass http://test;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_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;
# }
#}
}