什么是Nginx?Nginx是一个高性能的HTTP和反向代理服务器。它在处理高并发方面非常强大,可以承受高负载测试。一些报告表明它最多可以支持50,000个并发连接Nginx的作用1.反向代理a.正向代理需要在客户端(浏览器)配置代理服务器,通过代理服务器访问互联网b.实际上,客户端对代理是没有感知的,因为客户端不需要任何配置就可以访问。我们只需要将请求发送到反向代理服务器即可。反向代理服务器选择目标服务器获取数据后,返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,它暴露了代理服务器地址并隐藏了真实服务器IP地址。2、负载均衡不是单台服务器就能解决的。增加服务器的数量,然后将请求分发到每个服务器。不再将原始请求集中在单个Nginx服务器上,而是将请求分散到多个服务器上,将负载分散到不同的服务器上。3、动静分离为了加快网站的解析速度,动态页面和静态页面可以由不同的服务器进行解析,以加快解析速度。减轻原有单台服务器的压力。nginx安装复制粘贴完成Linux安装Nginxnginx常用命令1.使用nginx命令前提条件:必须进入nginx记录/usr/local/nginx/sbin2.查看nginx版本号。/nginx-v3.启动nginx./nginx4.关闭nginx./nginx-sstop5.重新加载nginx./nginx-sreloadnginx配置文件vi/usr/local/nginx/conf/nginx.conf#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.log信息;#pidlogs/nginx.pid;events{worker_connections1024;}http{includemime.types;default_type应用程序/八位字节流;#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';#access_log日志/access.logmain;发送文件;#tcp_nopush上;#keepalive_timeout0;keepalive_timeout65;#gzip上;服务器{听80;服务器名称192.168.148.131;#charsetkoi8-r;#Access_loglogs/host.access.logmain;位置/html/{根目录/data/;indexindex.htmlindex.htm;}位置/图像/{根目录/数据/;自动索引;}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根html;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#包含fastcgi_params;#}#拒绝访问.htaccess文件,如果Apache的文档根#与nginx的根一致##location~/\.ht{#denyall;#}}#另一个混合使用基于IP、名称和端口的配置的虚拟主机##server{#listen8000;#听某个名字:8080;#server_namesomename别名another.alias;#位置/{#根html;#索引index.htmlindex.htm;#}#}#HTTPS服务器##server{#listen443ssl;#server_name本地主机;#ssl_certificatecert.pem;#ssl_certificate_keycert.key;#ssl_session_cache共享:SSL:1m;#ssl_session_timeout5m;#ssl_ciphersHIGH:!aNULL:!MD5;#ssl_prefer_server_ciphers开启;#位置/{#根html;#索引index.htmlindex.htm;#}#}}nginx由三部分组成1.全局块从配置文件开始到events块之间的内容主要是设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组),允许产生的worker进程数,进程PID存放路径,日志存放路径和类型,以及配置文件的引入等,比如上面第一行配置的worker_processes1;这是Nginx服务器并发处理服务的关键配置。worker_processes的值越大,能够支持的并发处理越多,但是会受到硬件、软件等设备的影响约束2.事件块如:events{worker_connections1024;}events块中涉及的指令主要影响Nginx服务器和用户之间的网络连接。常用的设置包括是否开启多个工作进程下的网络连接序列化,是否允许同时接收多个网络连接,选择哪种事件驱动模型来处理连接请求,每个word进程最多支持的连接数等。上面的例子表示每个worker进程支持的最大连接数是1024。3.httpblockhttp{includemime.types;default_type应用程序/八位字节流;发送文件;服务器{听80;服务器名称192.168.148.131;位置/html/{根目录/data/;indexindex.htmlindex.htm;}位置/图像/{根目录/数据/;自动索引;}error_page500502503504/50x.html;location=/50x.html{根html;}}这是Nginx服务器配置最频繁的部分,代理,缓存,日志定义等第三方模块的大部分功能和配置都在这里。需要说明的是:http块还可以包括http全局块和服务器块a。http全局块http全局块配置说明包括文件导入、MIME-TYPE定义、日志自定义、连接超时时间、最大单链接请求数等。b.服务器块与虚拟主机密切相关。从用户的角度来看,虚拟主机与独立的硬件主机完全一样。这项技术的创建是为了节省Internet服务器硬件的成本。每个http块可以包含多个server块,每个server块相当于一个虚拟主机。每个服务器块也分为全局服务器块,并且可以同时包含多个位置块。<1>全局服务器块最常见的配置是虚拟机主机的监控配置和虚拟主机的名称或IP配置。<2>locationblock一个serverblock可以配置多个locationblock。该块的主要作用是根据Nginx服务器收到的请求字符串(如server_name/uri-string),虚拟主机名(或IP别名)以外的字符串(如前面的/uri-string)匹配以处理特定请求。地址定向、数据缓存、响应控制等功能,以及很多第三方模块的配置也在这里进行。Nginx反向代理实现1、启动一个8080端口的tomcat2.3,访问ip时,反向代理到tomcat启动页面Nginx负载均衡实现1、在8080端口和8081端口启动tomcat,放置两个同名的html文件和webapps目录下的不同内容。假设是test.html2.3.ip/test.html轮询访问两个tomcat页面Nginx将访问tomcat的动态和静态分开请求是动态请求,访问前端页面是静态请求。使用location分离两个请求1.准备liunx系统中的前端页面静态资源,用于访问/root/data/html/test.html/root/data/image/test.png2.3.ip/html/test.html访问ip/image/test.png访问Nginx高可用实现1.准备两台服务器,安装nginx和keepalived2。修改两台服务器/etc/keepalived/keepalivec.conf配置文件global_defs{notification_email{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_fromAlexandre.Cassen@firewall.locsmtp_server192.168.17.129smtp_connect_timeout30router_idLVS_DEVEL}vrrp_scriptchk_http_port{script"/usr/local/src/nginx_check.sh"interval2#(脚本执行的间隔)weight2}vrrp_instanceVI_1{stateBACKUP#在备份服务器接口上将MASTER改为BACKUPens33//网卡virtual_router_id51#主备机的virtual_router_id优先级必须相同90#主备机优先级不同,主机大,备机小advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.17.50//VRRPH虚拟地址}}3.在/usr/local/src#!/bin/bash添加检测脚本A=`ps-Cnginx–no-header|wc-l`if[$A-eq0];then/usr/local/nginx/sbin/nginxsleep2if[`ps-Cnginx--no-header|wc-l`-eq0];thenkillallkeepalivedfifi4.两台服务器启动nginx,keepalived5。停止Mainservernginx,keepalived,然后访问nginx
