nginx部署使用

Nginx部署使用

1 本手册基于centos8部署测试

2 安装部署nginx

dnf -yinstall gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-develpcre pcre-devel

dnf –yinstall nginx

nginx的配置文件在/etc/nginx/目录下,主要修改nginx.conf配置即可

3 修改配置文件内容

# For more information on configuration, see:

#   * Official  English Documentation: http://nginx.org/en/docs/

#   * Official  Russian Documentation: http://nginx.org/ru/docs/

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log;

pid /run/nginx.pid;

# Load dynamic modules. See  /usr/share/doc/nginx/README.dynamic.

include /usr/share/nginx/modules/*.conf;

events {

  worker_connections 1024;

}

http {

  #log_format  main  '$remote_addr - $remote_user [$time_local]  "$request" '

    #    '$status $body_bytes_sent "$http_referer"  '

    #                 

  '"$http_user_agent" "$http_x_forwarded_for"';

    log_format  log_json '{ "@timestamp": "$time_local", '

            '"remote_addr":  "$remote_addr", '

       '"referer":  "$http_referer", '

            '"request":  "$request", '

       '"status":  $status, '

       '"bytes":  $body_bytes_sent, '

       '"agent":  "$http_user_agent", '

       '"x_forwarded":  "$http_x_forwarded_for", '

       '"up_addr":  "$upstream_addr",'

       '"up_host":  "$upstream_http_host",'

       '"up_resp_time":  "$upstream_response_time",'

       '"request_time":  "$request_time"'

       '}';

 access_log 

  /var/log/nginx/access.log 

  log_json;

  sendfile            on;

  tcp_nopush          on;

  tcp_nodelay         on;

  keepalive_timeout   65;

   types_hash_max_size  2048;

  include            

  /etc/nginx/mime.types;

  default_type       

  application/octet-stream;

    # Load  modular configuration files from the /etc/nginx/conf.d directory.

    # See  http://nginx.org/en/docs/ngx_core_module.html#include

    # for more  information.

    include  /etc/nginx/conf.d/*.conf;

    upstream htmlservers {

      server 192.168.248.160;

      server 192.168.248.155;

    }

     upstream phpservers {

       server 192.168.248.160;

       server 192.168.248.155;

    }

     upstream picservers {

       server 192.168.248.160;

       server 192.168.248.155;

     }

    server {

  listen       80 default_server;

  listen       [::]:80 default_server;

  server_name  _;

  root        

  /usr/share/nginx/html;

        # Load  configuration files for the default server block.

  include /etc/nginx/default.d/*.conf;

  location / {

       root 

  html;

  index  index.html index.jsp  index.php;

           if ($request_uri ~* \.html$){

  proxy_pass http://htmlservers;

      }

            if ($request_uri ~* \.php$){

             proxy_passhttp://phpservers;   //http后面表示负载均衡机器群组

             }

        proxy_pass  http://picservers;

        }

  error_page 404 /404.html;

  location = /40x.html {

        }

  error_page 500 502 503 504 /50x.html;

  location = /50x.html {

        }

    }

# Settings for a TLS enabled server.

#

#    server {

#       

  listen       443 ssl http2  default_server;

#       

  listen       [::]:443 ssl http2  default_server;

#       

  server_name  _;

#       

  root        

  /usr/share/nginx/html;

#

#       

  ssl_certificate "/etc/pki/nginx/server.crt";

#       

  ssl_certificate_key "/etc/pki/nginx/private/server.key";

#       

  ssl_session_cache shared:SSL:1m;

#       

  ssl_session_timeout  10m;

#       

  ssl_ciphers PROFILE=SYSTEM;

#       

  ssl_prefer_server_ciphers on;

#

#        #  Load configuration files for the default server block.

#       

  include /etc/nginx/default.d/*.conf;

#

#       

  location / {

#        }

#

#       

  error_page 404 /404.html;

#           

  location = /40x.html {

#        }

#

#       

  error_page 500 502 503 504 /50x.html;

#            location = /50x.html {

#        }

#    }

}

以json格式保存文件

    log_format  log_json '{ "@timestamp": "$time_local", '

            '"remote_addr":  "$remote_addr", '

       '"referer":  "$http_referer", '

            '"request":  "$request", '

       '"status":  $status, '

       '"bytes":  $body_bytes_sent, '

       '"agent":  "$http_user_agent", '

       '"x_forwarded":  "$http_x_forwarded_for", '

       '"up_addr":  "$upstream_addr",'

       '"up_host":  "$upstream_http_host",'

       '"up_resp_time":  "$upstream_response_time",'

       '"request_time":  "$request_time"'

       '}';

  access_log 

  /var/log/nginx/access.log 

  log_json;

[if !vml]

[endif]

4 nginx负载均衡做法

nginx的负载均衡用于upstream模板定义的后端服务器列表中选取一台服务器接收用户的请求。一个基本的upstream模块如下:

upstream [服务器组名称]{

server

  [IP地址]:[端口号];

server

  [IP地址]:[端口号];

....

}

在upstream模块配置完成后,要让指定的访问反向代理到服务器列表,格式如下:

location ~

  .*$ {

index

  index.jsp index.html;

proxy_pass

  http://[服务器组名称];

}

扩展:nginx的location配置规则:http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-explain

这样就完成了最基本的负载均衡,但是这并不能满足实际需求。目前Nginx的upstream模块支持6种方式的负载均衡策略(算法):轮询(默认方式)、weight(权重方式)、ip_hash(依据ip分配方式)、least_conn(最少连接方式)、fair(第三方提供的响应时间方式)、url_hash(第三方通过的依据URL分配方式)。

1)轮询

最基本的配置方法,是upstream模块默认的负载均衡策略。每个请求会按时间顺序平均分配到不同的后端服务器。有如下参数:

fail_timeout与max_fails结合使用

max_fails在fail_timeout参数设置的时间内最大失败次数。如果在这个时间内,所有该服务器的请求都失败了,那么认为该服务器停机

fail_time服务器被认为停机的时长,默认10s(被认为停机的服务器尝试间隔?)

backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里

down标记服务器永久停机

注意:1.down标记的服务器会自动剔除;2.缺省就是轮询;3.此策略适合服务器配置无状态且短平块的服务使用

2)weight

权重方式,在轮询策略的基础上指定轮询的几率。也可以认为是在轮询的基础上新增了一个weight的参数,此参数指定轮询的几率,值为number。upstream模块配置模板如下:

upstream [服务器组名称]{

server

  [IP地址]:[端口号] weight=2;

server

  [IP地址]:[端口号];

....

}

在该例子中,没有weight参数的服务器默认为1,weight的数值与访问比例成正比,所有weight值的总和为一个循环单位,服务器自身的weight值为循环单位内的轮询次数。

注意:1.权重越高分配到的请求越多;2.此策略可以和least_conn策略、iphash策略结合使用;3.此策略比较适合服务器硬件配置差距较大的情况。

3)ip_hash

依据ip分配方式,指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端请求一致发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。upstream模块配置模板如下:

upstream [服务器组名称]{

ip_hash;

server

  [IP地址]:[端口号] weight=2;

server

  [IP地址]:[端口号];

....

}

注意:1.nginx1.3.1之前的版本不能在ip_hash中使用权重(weight);2..ip_hash不能与backup同时使用;3.此策略适合有状态服务的程序,比如session;4.当有服务器需要剔除,必须手动down掉。

4)least_conn

最少连接方式,把请求发给链接数最少的后端服务器。轮询是把请求平均分配给各个后端,使它们的负载大致相同。但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。upstream模块配置模板如下:

upstream [服务器组名称]{

least_conn;

server

  [IP地址]:[端口号] weight=2;

server

  [IP地址]:[端口号];

....

}

注意:此策略适合请求处理时间长短不一造成的服务器过载情况。

5)fair

响应时间方式,按照服务器端的响应时间来分配请求,响应时间短的优先分配。upstream模块配置模板如下:

upstream [服务器组名称]{

server

  [IP地址]:[端口号] weight=2;

server

  [IP地址]:[端口号];

....

fair;

}

注意:需要安装第三方插件。

6)url_hash

url分配方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以在缓存中读取。upstream模块配置模板如下:

upstream [服务器组名称]{

hash

  $request_uri;

server

  [IP地址]:[端口号] weight=2;

server

  [IP地址]:[端口号];

....

}

注意:1.需要安装第三方插件;2.uri,是i,不是小写的L。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335