nginx

和自甴很熟 提交于 2019-11-29 19:40:38

1.nginx概述

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务

2.常见的web服务器

1、Apache是世界上应用最多的WEB服务器,优势主要在于源代码开放、有一支开放的开发队伍、支持跨平台应用以及其可移植性等。Apache的模块支持非常丰富,虽在速度和性能上不及其他轻量级WEB服务器,是属于重量级产品,所消耗的内存也比其他WEB服务器要高。

    2、Lighttpd是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的WEB Server环境,它具有内存开销低、CPU占有率低、效能好,以及模块丰富等特点。支持FastCGI、CGI、Auth、输出压缩、URL重写及Alias等重要功能,属于轻量级WEB服务器。

    3、Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的web应用软件容器,Tomcat server是根据servlet和jsp规范执行的,因此也可以说Tomcat server实行了Apache-Jakarta规范,且比绝大多数商用应用软件服务器要好,但是,tomcat对静态文件和高并发的处理比较弱。

    4、IBM WebSphere是一种功能完善、开放的WEB应用程序服务器,它基于Java的应用环境,建立、部署和管理Internet和Intranet Web应用程序。相对于其他流行的WEB服务器而言,应用的数量很少。

    5、IIS是一种WEB服务组件,允许在公共Intranet或Internet上发布信息的WEB服务器,其中包括WEB服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络上发布信息成了一件很容易的事情。它提供ISAPI作为扩展WEB服务器功能的编程接口,同时还提供了Internet,可以实现对数据库的查询和更新。

    6、Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的epoll、kqueue、eventport最为网络I/O模型,在高连接并发的情况下,能够支持高达5万个并发连接数的响应,而内存、CPU等系统资源消耗却非常低,运行非常稳定。

Nginx与Apache、Lighttpd的综合对比:

原文链接:https://blog.csdn.net/apeopl/article/details/80769910

3.nginx应用场景

  1.反向代理

  反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。

server { 
  listen 80; 
  server_name localhost;
  client_max_body_size 1024M;
  location / { 
                   proxy_pass http://localhost:8080; 
                   proxy_set_header Host $host:$server_port; 
  } 

} 

 

  2.负载均衡

  负载均衡其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。 而 Nginx 目前支持自带3种负载均衡策略,还有2种常用的第三方策略

1、RR(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream test {
   server localhost:8080; 
   server localhost:8081; 
}    #负载均衡核心代码
 server {
   listen 81; 
   server_name localhost; 
   client_max_body_size 1024M;
   location / {
                    proxy_pass http://test; 
                    proxy_set_header Host $host:$server_port; 
   } 

} 

2、权重 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如

upstream test {
              server localhost:8080 weight=9; 
              server localhost:8081 weight=1; 
}

3、ip_hash 上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,
当我们的程序不是无状态的时候(采用了 session 保存数据),这时候就有一个很大的很问题了,
比如把登录信息保存到了 session 中,那么跳转到另外一台服务器的时候就需要重新登录了。
所以很多时候我们需要一个客户只访问一个服务器,那么就需要用 iphash 了,
iphash 的每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream test {
             ip_hash; 
             server localhost:8080; 
             server localhost:8081; 
} 

4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend {
                 fair; 
                 server localhost:8080; 
                 server localhost:8081; 
} 

5、url_hash(第三方) 按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。

在 upstream 中加入 hash 语句,server 语句中不能写入 weight 等其他的参数,

hash_method 是使用的 hash 算法

upstream backend { 
                hash $request_uri; 
                hash_method crc32;
                server localhost:8080; 
                server localhost:8081; 
}

 

  3.代理缓存

  4.静态资源

  5.动静分离

  6.Https

  7.正向代理

  正向代理 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 客户端才能使用正向代理。当你需要把你的服务器作为代理服务器的时候,可以用 Nginx 来实现正向代理

4.nginx安装,配置,启动

  1.源码安装

  2.yum --官方仓库

  3.yum --epel仓库

例:安装官方仓库源

  [root@web01 ~]# cat /etc/yum.repos.d/nginx.repo
  [nginx-stable]
  name=nginx stable repo
  baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  gpgcheck=1
  enabled=1
  gpgkey=https://nginx.org/keys/nginx_signing.key

  使用yum直接安装

  [root@web01 ~]# yum install nginx -y

  启动nginx

  [root@web01 ~]# cat /etc/nginx/nginx.conf
5.nginx配置了解

[root@web01 ~]# cat /etc/nginx/nginx.conf
user  nginx;    #nginx进程用户身份
worker_processes  1;    #nginx的工作进程数
error_log  /var/log/nginx/error.log warn;    #错误日志的路径【警告级别才会记录】
pid        /var/run/nginx.pid;    #进程运行后,会产生一个pid
events {    #时间模型
    worker_connections  1024;    #每个work能够支持的连接数
}
http {
    include       /etc/nginx/mime.types;    #包含所有静态资源的文件
    default_type  application/octet-stream;    #默认类型

 日志文件相关
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;    #访问日志的路径
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;    #长链接超时时间
    #gzip  on;    #启用压缩功能

 

    #使用Server配置网站, 每个Server{}代表一个网站
   server {
        listen 80;
        server_name test.oldxu.com;
        
        location / {                    #控制网站访问的路径
            root ...;
        }
    }


    include /etc/nginx/conf.d/*.conf;    #包含哪些文件
}

ps:nginx中的http,server,location之间的关系是

http  标签主要用户解决用户的请求与响应

server  标签主要用来响应具体的某一个网站

location  标签主要用于匹配网站的具体url路径

6.nginx 搭建游戏网站

   1.注释掉之前的默认网站
   [root@web01 html]# cd /etc/nginx/conf.d/
   [root@web01 conf.d]# gzip default.conf

   2.编写游戏网站Nginx配置文件
   [root@web01 conf.d]# cat game.oldxu.com.conf
   server {
        listen 80;            #该网站提供访问的端口
        server_name game.oldxu.com;    #访问该网站的域名
    
        location / {
                root /code;
                index index.html;
            }
       }

   3.根据Nginx的配置文件,初始化
   [root@web01 conf.d]# mkdir /code

   4.上传代码
   [root@web01 conf.d]# cd /code/
   [root@web01 code]# rz html5.zip
   [root@web01 code]# unzip html5.zip

   5.检测语法
   [root@web01 code]# nginx -t
   nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
   nginx: configuration file /etc/nginx/nginx.conf test is successful


   6.重载服务
   [root@web01 code]# systemctl restart nginx

   7.配置域名解析

8.nginx访问整体流程

 

9.nginx搭建多个游戏网站

  虚拟主机:在一台服务器上运行多套网站

  nginx配置虚拟主机的三种方法:

  方式一:基于多主机IP方式

  方式二:基于端口的配置方式

  方式三:基于名称方式(多域名方式)

方式一:基于主机多IP的方式、

[root@web01 conf.d]# cat ip_eth0.conf
server {
    listen 10.0.0.7:80;
    location / {
        root /ip1;
        index index.html;
    }
}
server {
    listen 172.16.1.7:80;
    location / {
        root /ip2;
        index index.html;
    }
}
[root@web01 conf.d]# mkdir /ip1 /ip2
[root@web01 conf.d]# echo "10...." > /ip1/index.html
[root@web01 conf.d]# echo "172...." > /ip2/index.html
[root@web01 conf.d]# systemctl restart nginx


测试访问
[root@web01 ~]# curl http://10.0.0.7
10....
[root@web01 ~]# curl http://172.16.1.7
172....

方式二:基于端口的配置方式

[root@web01 conf.d]# cat port.conf
server {
    listen 81;

    location / {
        root /81;
        index index.html;
    }
}

server {
    listen 82;

    location / {
        root /82;
        index index.html;
    }
}

server {
    listen 83;

    location / {
        root /83;
        index index.html;
    }
}
[root@web01 conf.d]# mkdir /81 /82 /83
[root@web01 conf.d]# echo "81" > /81/index.html
[root@web01 conf.d]# echo "82" > /82/index.html
[root@web01 conf.d]# echo "83" > /83/index.html

io网络模型:https://blog.csdn.net/yxtxiaotian/article/details/84068839

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!