本文目录导航:
Nginx代理的概念
1、意思是一种主机。
Nginx(enginex)是一个高性能的HTTP和反向代理web主机,同时也提供了IMAP/POP3/SMTP服务。
2、nginx反向代理的意思:就是代理外部主机对外启动服务的nginx代理服务。
3、先了解正向代理和反向代理的概念。
反向代理就是:客户端A,代理主机B,真正解决恳求的主机C,A发恳求到B,B把恳求转发给C,C解决完前往给B,B再前往给客户端A。
4、Nginx是一个高性能的HTTP和反向代理主机,特点是占用内存少,并发才干强,理想上Nginx的并发才干确真实同类型的网页主机中体现好。
5、PM2是一款十分好用的服务启动容器。
它可以让你坚持运行程序永远运转,要从新加载它们无需停机(我是这么了解的:PM2是一个监控工具)。
nginx是一款轻量化的web主机。
6、正向代理,用深刻的形式来说,就是代理主机只起到转发的作用,例如,在顾客进商店购置物品,商店就是一个正向代理,起到的作用就是把商品从厂家代理售卖到顾客手中。
nginx主机有什么作用以及什么是反向代理
一:Nginx作为正向代理主机:
1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将主机部署在公司的网关,代理公司外部员工上外网的恳求,可以起到必定的安保作用和治理限度造用,正向代理不支持从外网向内网访问资源,普通很少用,经自己测试,成果也不好,有很多页面打不开,在网络搜查的页面也不可前往。
server {server_name localhost;resolver 202.106.0.20 8.8.8.8; #只能有一个resolve,然而可以用空格隔开,继续写下一个resolver_timeout 5s;listen 8080;location / {proxy_pass$scheme://$http_host/$request_uri;proxy_set_header Host $http_host;proxy_buffers 256 4k;proxy_max_temp_file_size 0;proxy_connect_timeout 30;proxy_cache_valid 200 302 10m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;}}
2.失误码502 :Nginx作为代理主机向后端转发恳求环节中超时。
二:Nginx作为反向代理主机:
反向代理:反向代理也叫reverse proxy,指的是代理外网用户的恳求到外部的指定web主机,并将数据前往给用户的一种形式,这是用的比拟多的一种形式。
反向代理的罕用指令:
_pass:用来设置将恳求转发给的后端主机的主机,可以是主机名、IP地址:端口的形式,也可以代理到经过upstream设置的主机组,如下:
upstream webserver {#ip_hash;server 192.168.0.201 weight=1 max_fails=2 fail_timeout=2;server 192.168.0.202 weight=1 max_fails=2 fail_timeout=2;server 127.0.0.1:9008 backup;}server {server_name ;#access_log logs/ main;location / { #静态网页在本机roothtml;index ;}location ~* ^/form { #指定目录在后端主机proxy_pass#此处前面不能加/,假设加了会揭示语法失误proxy_set_header X-Real-IP $remote_addr;}}
2:proxy_hide_header:用于nginx主机作为反向代理的时刻,在前往给客户端http照应的时刻,暗藏后端服务版本(如php版本)的消息,可以设置在http/server或location块,如下:
Nginx会将抢先主机的照应转发给客户端,但自动不会转发以下HTTP头部字段:Date、Server、X-Pad和X-Accel-*。
经常使用proxy_hide_header后可以恣意地指定哪些HTTP头部字段不能被转发。
例如:
proxy_hide_header Cache-Control; proxy_hide_header MicrosoftOfficeWebServer;
注:假设是nginx间接作为web主机,要暗藏版本消息的话,经常使用fastcgi_hide_header:
3:proxy_pass_header:与proxy_hide_header性能相反,proxy_pass_header会将原来制止转发的header设置为准许转发,可以设置在http/server或location块例如:
proxy_pass_headerX-Accel-Redirect;
4:proxy_pass_request_body:能否向后端主机发送HTTP包体局部,可以设置在http/server或location块,如下:
proxy_pass_request_body on|off; #默以为on
5:proxy_pass_request_headers:能否将客户端的恳求头部转发给后端主机,可以设置在http/server或location块,如下:
proxy_pass_request_headers on | off; #默以为on
6:proxy_set_header:可以更改或增加客户端的恳求头部消息内容,并转发之后端主机,比如在后端主机想要失掉客户端的真实IP的时刻,就要更改每一个报文的头部,如下:
proxy_set_header HOST $remote_addr; #增加HOST到报文头部,其值为客户端的公网IP地址
7:proxy_set_body:更改nginx主机接纳到的客户端恳求的恳求内容,而后将修正后的恳求转发给后端的主机,用法如下:
proxy_set_body value; #其中value为要修正的指标内容,可以是变量、文本或许变量的组合。
8:proxy_ip:Nginx 0.8.22版本及以上支持此性能,用于Nginx性能了多个基于域名或IP的主机的状况下,可以指定代理衔接到特定的主机解决,就是强迫将客户端恳求绑定到指定的IP地址:
proxy_bind x.x.x.x;
9:proxy_connect_timeout:性能nginx主机与后端主机尝试建设衔接的超时期间,默以为60秒,用法如下:
proxy_connect_timeout 10s; #10s为自定义nginx与后端主机建设衔接的超时期间
10:proxy_read_time:性能nginx主机向后端主机或主机组动员read恳求后,期待的超时期间:
proxy_read_time 10s; #默以为60秒
11:proxy_send_time; 性能nginx项后端主机或主机组动员write恳求后,期待的超时期间:
proxy_send_time 10s; #默以为60s
12:proxy_http_version:用于设置nginx提供代理服务的HTTP协定的版本:
proxy_http_version 1.0|1.1;
13:proxy_method:设置nginx主机恳求后端主机时经常使用的方法,普通为POST或许GET,客户端的恳求方法将被疏忽:
proxy_method GET|PUT;
14:proxy_ignore_client_abort:设置在客户端网络终止恳求时,nginx主机能否终止对被代理主机的恳求:
proxy_ignore_client_abort off|on; #默以为off,当客户端网络终止恳求时,nginx主机终止其对后端主机的恳求。
15:proxy_ignore_headers:设置nginx不解决后端主机前往的数据中蕴含某些指定字段的报文,可以指定的有:”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”:
proxy_ignore_headers Expires;
16:proxy_redirect:修正后端主机前往的照应头部中的location货refresh,与proxy_pass配合经常使用:
17:proxy_intercept_errors:设置nginx主机前往客户端的失误形态,当后端主机前往大于等于400的失误码的是,假设本色能是关上的,则nginx主机前往自定义的失误页面(经常使用error page定义的),假设没有开启就将后端主机前往的HTTP形态间接前往给客户端,默以为封锁:
proxy_intercept_errors on | off;
18:proxy_headers_hash_max_size:设置nginx保留HTTP报文头的hash表的下限,默以为512字节:
proxy_headers_hash_bucket_size 512;#放开nginx保留HTTP报文头的hash表的空间大小,默以为64个字节proxy_headers_hash_max_size 512; #下限server_names_hash_max_szie512; #设置主机称号的下限server_namse_hash_bucket_size 512; #放开空间大小
19:proxy_headers_hash_bucket_size:#放开nginx保留HTTP报文头的hash表的空间大小,默以为64个字节
proxy_headers_hash_bucket_size 512; #默以为64字节
20:proxy_net_upstream:当经常使用了upstream的时刻,可以定义在出现了特定的状况下将恳求依次交给下一个组内的主机解决,形态包括:
proxy_next_upstream http_404 http_502; //让404报错进入max_fails计数upstream online {sticky;server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ;server 172.28.70.163:8080 max_fails=0 fail_timeout=3s ;check interval=3000 rise=2 fall=1 timeout=1000 type=http;check_http_send GET / HTTP/1.0\r\n\r\n;check_http_expect_alive http_2xx http_3xx;}upstream backup {server 172.28.22.29:7777 max_fails=0 fail_timeout=3s;}
21:proxy_ssl_session_reuse:性能能否基于SSL协定与后端主机建设衔接,如下:
proxy_ssl_session_reuse on | off;
Nginx运维:Keepalived成功Nginx主从高可用
前言为提供系统的高可用,满足网络安保等级包全的热冗余的要求,平台须要对运行程序做高可用,本文关键针对Nginx启动集群性能。
一、NginxHA概述
nginx在系统中的作用是给系统提供一些负载平衡和灵活代理的作用。
经过不同轮询到不同服务,即使一台主机挂掉,也能将恳求转发到其余主机上。
但假设nginx挂掉,那此时整个系统就没有入口了,所以,咱们须要对Nginx做高可用性能。
这里预备两台Nginx主机。
详细的思绪是,将两台Nginx主机都设置成一个虚构IP,当主Nginx主机挂掉之后,当咱们再次访问的时刻,实践上就是访问咱们的从Nginx主机来做负载平衡了,整个IP切换环节关于用户来说是没有觉得的,这种上班IP地址变动的环节,被称为IP漂移。
这个虚构IP是由第三方软件提供的,它就是keepalived。
二、keepalivedKeepalived提供了两种形式:
master->backup形式:一旦主库宕机,虚构ip会智能漂移到从库,当主库修复后,keepalived启动后,还会把虚构ip抢占上来,即使设置了非抢占形式(nopreempt)抢占ip的举措也会出现。
backup->backup形式p会智能漂移到从库上,当原主库复原和keepalived服务启动后,并不会抢占新主的虚构ip,即使是优先级高于从库的优先级别,也不会出现抢占。
为了缩小ip漂移次数,理论是把修复好的主库当做新的备库。
1、首先,咱们先确认下网卡及IP
ipaddrshow|grepinet2、接着启动装置:
yuminstallkeepalived–y3、接着性能/etc/keepalived/这个文件
主主机性能:
!ConfigurationFileforkeepalivedglobal_defs{#标识主机idrouter_idNGINX_102}##检测脚本和权重参数vrrp_scriptchk_http_port{script/opt/software/nginx/sh/nginx_##性能脚本的门路interval2#(检测脚本口头的距离)weight2##权重}vrrp_instanceVI_1{#标志为主主机stateMASTERinterfaceens33virtual_router_id51priority100advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.81.104}track_script{chk_http_port}}从服务性能,只有把state改为backup,和优先级降落即可。
vrrp_instanceVI_1{stateBACKUP#备份主机上将MASTER改为BACKUPinterfaceeth0##网卡,可以从ipconfig这个命令查到virtual_router_id51#主、备机的virtual_router_id必定相反priority90#主、备机取不同的优先级,主机值较大,备份机值较小,普通来说,主100备80advert_int1##心跳,秒,每隔一秒发送一个心态确认咱们的Nginx主机的存活状况authentication{##明码验证auth_typePASSauth_pass}virtual_ipaddress{192.168.81.104##VRRPH虚构地址}}脚本内容如下:
nginx_:脚本的门路与nginx的启动门路分歧
#!/bin/bashA=`ps-Cnginx–no-header|wc-l`if[$A-eq0];then/usr/local/nginx/sbin/nginxsleep2if[`ps-Cnginx--no-header|wc-l`-eq0];thenkillallkeepalivedfifi
脚本的目的是为了检测nginx服务能否挂掉,假设挂掉就尝试去启动它,假设启动失败,就把keepalived服务封锁。
经过测试独自封锁nginx,不封锁keepalived的话是不会转发到nginx从主机的。
因此,脚本的目的是为了保障这两个要么所有存在,要么所有失败。
留意:有个坑,假设发现你的nginx封锁之后脚本不口头的要素。
可用先看下门路
可用看下脚本的预备性,当然我这个是可用口头的
最后关键的一点是须要封锁selinux,而后从新启动
setenforce0终身封锁:
sed-is/^SELINUX=.*/SELINUX=disabled/g/etc/selinux/config自动是抢占式口头的。
启动形式:
1、先启动nginx
2、再启动keepalived
systemctlrestartkeepalived假设出错,记得检查日志:
tail-f/var/log/messages另外,假设照旧切换不上来,可以检查防火墙或ipotables有有限度。