综上所述:正向代理代理对象是客户端,反向代理代理对象是服务端
Nginx的安装
- 免费开源版的官方网站:http://nginx.org
- Nginx 有 Windows 版本和 Linux 版本,但更推荐在 Linux 下使用 Nginx;
- 下载nginx-1.14.2.tar.gz的源代码文件:
- wget http://nginx.org/download/nginx-1.14.2.tar.gz
相关库的安装
代码语言:txt复制安装前的准备
代码语言:txt复制Nginx的安装需要确定Linux安装相关的几个库,否则配置和编译会出现错误, 具体的检查安装过程为:
代码语言:txt复制(1) gcc编译器是否安装
代码语言:txt复制 检查是否安装:yum list installed | grep gcc
代码语言:txt复制 执行安装:yum install gcc -y
代码语言:txt复制(2) openssl库是否安装
代码语言:txt复制 检查是否安装:yum list installed | grep openssl
代码语言:txt复制 执行安装:yum install openssl openssl-devel -y
代码语言:txt复制(3) pcre库是否安装
代码语言:txt复制 检查是否安装:yum list installed | grep pcre
代码语言:txt复制 执行安装:yum install pcre pcre-devel -y
代码语言:txt复制(4) zlib库是否安装
代码语言:txt复制 检查是否安装:yum list installed | grep zlib
代码语言:txt复制 执行安装:yum install zlib zlib-devel -y
代码语言:txt复制(5) 一次性安装,执行如下命令
代码语言:txt复制 yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
代码语言:txt复制安装后查看相关的配置----------------
代码语言:txt复制make[1]: Leaving directory `/root/nginx-1.14.2'
代码语言:txt复制[root@192 nginx-1.14.2]# cd /usr/local/nginx/
代码语言:txt复制[root@192 nginx]# ll
代码语言:txt复制total 4
代码语言:txt复制drwxr-xr-x 2 root root 4096 Feb 25 22:53 conf
代码语言:txt复制drwxr-xr-x 2 root root 38 Feb 25 22:53 html
代码语言:txt复制drwxr-xr-x 2 root root 6 Feb 25 22:53 logs
代码语言:txt复制drwxr-xr-x 2 root root 34 Feb 25 22:53 sbin
代码语言:txt复制[root@192 nginx]#
启动关闭Nginx等
代码语言:txt复制[root@192 sbin]# cd /usr/local/nginx/sbin
代码语言:txt复制[root@192 sbin]# ./nginx
代码语言:txt复制[root@192 sbin]# netstat -tulnp | grep 80
代码语言:txt复制tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 35344/nginx: master
代码语言:txt复制tcp 0 0 192.168.1.1:4506 0.0.0.0:* LISTEN 2480/python
代码语言:txt复制tcp6 0 0 :::8009 :::* LISTEN 1158/java
代码语言:txt复制tcp6 0 0 :::8080 :::* LISTEN 1158/java
代码语言:txt复制tcp6 0 0 ::1:8005 :::* LISTEN 1158/java
代码语言:txt复制或者通过nginx的配置方式来启动
代码语言:txt复制[root@192 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 通过网页访问的是http://192.168.1.1:80
重启命令
代码语言:txt复制[root@192 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
代码语言:txt复制[root@192 sbin]# ./nginx -s reload
配置检查
代码语言:txt复制[root@192 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
代码语言:txt复制nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
代码语言:txt复制nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
其他命令
代码语言:txt复制Linux上查看nginx版本:/usr/local/nginx/sbin/nginx -V
代码语言:txt复制-v (小写的v)显示 nginx 的版本
代码语言:txt复制-V (大写的V)显示 nginx 的版本、编译器版本和配置参数
代码语言:txt复制[root@192 sbin]# ./nginx -V
代码语言:txt复制nginx version: nginx/1.14.2
代码语言:txt复制built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
代码语言:txt复制configure arguments: --prefix=/usr/local/nginx
代码语言:txt复制[root@192 sbin]# ./nginx -v
代码语言:txt复制nginx version: nginx/1.14.2
_Window下环境搭建
在官方网站下载最新windows版的nginx:http://nginx.org/en/download.html
将下载下来的nginx压缩包解压到一个目录下,解压后该软件就可以启动使用了
启动方式1:双击解压目录下的nginx.exe文件即可运行nginx;
启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx
关闭方式1:在资源管理器杀掉Nginx进程(有两个进程)
关闭方式2:在dos窗口切换到Nginx安装主目录下执行命令:nginx -s stop_
nginx的配置
Nginx的配置主要有三块,Nginx的核心配置文件主要由三个部分构成
这个文件位于Nginx的安装目录/usr/local/nginx/conf 目录下,名字为nginx.conf
(一) 基础配置
代码语言:txt复制#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
代码语言:txt复制user nobody;
代码语言:txt复制#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
代码语言:txt复制worker_processes 1;
代码语言:txt复制#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
代码语言:txt复制error_log logs/error.log;
代码语言:txt复制#error_log logs/error.log notice;
代码语言:txt复制#error_log logs/error.log info;
代码语言:txt复制pid logs/nginx.pid; #配置进程pid文件
(二) events的配置
代码语言:txt复制#配置工作模式和总连接数目
代码语言:txt复制events {
代码语言:txt复制 worker_connections 1024;
代码语言:txt复制}
(三)http服务配置
代码语言:txt复制http {
代码语言:txt复制 include mime.types;
代码语言:txt复制 default_type application/octet-stream;
代码语言:txt复制 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
代码语言:txt复制 # '$status $body_bytes_sent "$http_referer" '
代码语言:txt复制 # '"$http_user_agent" "$http_x_forwarded_for"';
代码语言:txt复制 #access_log logs/access.log main;
代码语言:txt复制 sendfile on;
代码语言:txt复制 #tcp_nopush on;
代码语言:txt复制 #keepalive_timeout 0;
代码语言:txt复制 keepalive_timeout 65;
代码语言:txt复制 #gzip on;
(四)server配置可以配置多个
代码语言:txt复制 server {
代码语言:txt复制 listen 80;
代码语言:txt复制 server_name localhost;
代码语言:txt复制 #charset koi8-r;
代码语言:txt复制 #access_log logs/host.access.log main;
代码语言:txt复制 location / {
代码语言:txt复制 root html;
代码语言:txt复制 index index.html index.htm;
代码语言:txt复制 }
代码语言:txt复制 #error_page 404 /404.html;
Nginx的主要的应用
静态网站部署
负载均衡
静态代理
动静分离
虚拟主机
(一)静态网站部署
Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端。
案例一:
将准备好的静态文件放到该Nginx的服务器上面,放到/opt/static上面
代码语言:txt复制drwxr-xr-x 3 root root 4096 Sep 27 2016 ace-master
代码语言:txt复制-rw-r--r-- 1 root root 2242437 May 11 2020 ace-master.zip
代码语言:txt复制[root@192 static]# pwd
代码语言:txt复制/opt/static
代码语言:txt复制[root@192 static]# mv ace-master http
然后修改nginx.conf 的配置文件
代码语言:txt复制 location / {
代码语言:txt复制 root /root/opt/static/http/;
代码语言:txt复制 index index.html index.htm;
代码语言:txt复制 }
代码语言:txt复制###然后重启nginx的服务应用,./nginx -s reload
登陆网址http://192.168.1.1:80 查看网页情况如下:
通过
http://192.168.1.1/http/
来访问该静态网页,修改配置文件信息。
访问的路径是 /opt/static/http/ 修改配置文件
可以理解成 ip port = root的地址
相当于访问http://192.168.1.1:80 = root = /opt/static
相当于访问http://192.168.1.1:80/http
= /opt/static/http
代码语言:txt复制 location /http {
代码语言:txt复制 root /opt/static;
代码语言:txt复制 index index.html index.htm;
代码语言:txt复制 }
代码语言:txt复制# 然后重启相关的nginx服务
(二)负载均衡
初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如
www.baidu.com。那么当用户在浏览器输入www.baidu.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。
- 负载均衡实现的方式undefined硬件负载均衡undefined主要的有 F5、深信服、Array 等应用undefined优点是有厂商专业的技术服务团队提供支持,性能稳定undefined缺点是费用昂贵,对于规模较小的网络应用成本太高undefined软件负载均衡undefined比如 Nginx、LVS、HAProxy 等,优点是免费开源,成本低廉undefinedNginx通过在nginx.conf文件进行配置即可实现负载均衡
案例:
通过nginx来实现访问两台tomcat的负载均衡,主要修改的是undefined 在http模块加上upstream配置,在server模块里添加location,并配置proxy_pass。
下载免安装tomcat的方式来,解压可以直接使用.
代码语言:txt复制#在/usr/local下面解压需要的包
代码语言:txt复制[root@192 local]# tar -zxvf apache-tomcat-9.0.13.tar.gz
代码语言:txt复制[root@192 local]# cp -rf apache-tomcat-9.0.13/ apache-tomcat-9.0.13-9100/
代码语言:txt复制[root@192 local]# cp -rf apache-tomcat-9.0.13/ apache-tomcat-9.0.13-9200/
修改两台tomcat的端口连接,主要的server.xml这个文件,主要修改三个地方。
代码语言:txt复制[root@192 conf]# pwd
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9100/conf
代码语言:txt复制[root@192 conf]# cp server.xml server.xml.20210309
代码语言:txt复制[root@192 conf]# vi server.xml
代码语言:txt复制 <Connector port="9100" protocol="HTTP/1.1"
代码语言:txt复制 connectionTimeout="20000"
代码语言:txt复制 redirectPort="8443" />
代码语言:txt复制-------------------------------------------------------
代码语言:txt复制[root@192 conf]# pwd
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9200/conf
代码语言:txt复制[root@192 conf]# vi server.xml
代码语言:txt复制<Connector port="9200" protocol="HTTP/1.1"
代码语言:txt复制 connectionTimeout="20000"
代码语言:txt复制 redirectPort="8443" />
代码语言:txt复制<Server port="8004" shutdown="SHUTDOWN">
代码语言:txt复制<Connector port="8008" protocol="AJP/1.3" redirectPort="8443" />
代码语言:txt复制---------------------------------------------------------
代码语言:txt复制把相应的准备好的包myweb.war放在该路径下面
代码语言:txt复制[root@192 webapps]# pwd
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9200/webapps
代码语言:txt复制[root@192 webapps]# ll
代码语言:txt复制total 628
代码语言:txt复制drwxr-x--- 14 root root 4096 Mar 8 19:06 docs
代码语言:txt复制drwxr-x--- 6 root root 78 Mar 8 19:06 examples
代码语言:txt复制drwxr-x--- 5 root root 82 Mar 8 19:06 host-manager
代码语言:txt复制drwxr-x--- 5 root root 97 Mar 8 19:06 manager
代码语言:txt复制drwxr-x--- 5 root root 63 Mar 8 21:13 myweb
代码语言:txt复制-rw-r--r-- 1 root root 633679 Mar 8 21:11 myweb.war
代码语言:txt复制drwxr-x--- 3 root root 4096 Mar 8 19:06 ROOT
代码语言:txt复制-------------------------------------------------------------------
代码语言:txt复制#重启两台相应的服务应用
代码语言:txt复制[root@192 bin]# pwd
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9200/bin
代码语言:txt复制[root@192 bin]# ./startup.sh |tailf ../logs/catalina.out
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9100/bin
代码语言:txt复制[root@192 bin]# ./startup.sh |tailf ../logs/catalina.out
然后通过网页访问这两个tomcat的地址
好了,到目前位置,两台tomcat的访问已经通了,接下来可以通过nginx来实现负载均衡。
修改一:在http模块加上upstream配置
负载均衡模块(upstream)upstream模块主要负责负载均衡的配置
,通过默认的轮询调度方式来分发请求到后端服务器。
代码语言:txt复制 upstream www.myweb.com {
代码语言:txt复制 server 127.0.0.1:9100 weight=3;
代码语言:txt复制 server 127.0.0.1:9200 weight=1;
代码语言:txt复制 }
代码语言:txt复制---------------------------------------------------------
代码语言:txt复制其中weight=1表示权重,用于后端服务器性能不均的情况,
代码语言:txt复制访问比率约等于权重之比,权重越大访问机会越多
代码语言:txt复制upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,
代码语言:txt复制并且它还能对后端的服务器的健康状态进行检查,
代码语言:txt复制若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。
修改二:在server模块里添加location,并配置proxy_pass
代码语言:txt复制 location /myweb {
代码语言:txt复制 proxy_pass http://www.myweb.com;
代码语言:txt复制 }
代码语言:txt复制#重启nginx服务
代码语言:txt复制-rwxr-xr-x 1 root root 3746901 Feb 25 22:53 nginx
代码语言:txt复制[root@192 sbin]# ./nginx -s reload
修改三:因为是在虚拟机上面,修改linux系统和windows的hosts文件
代码语言:txt复制[root@192 ~]# cat /etc/hosts
代码语言:txt复制127.0.0.1 www.myweb.com
代码语言:txt复制::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
代码语言:txt复制192.168.1.1 www.myweb.com
修改windows的hosts文件
修改为 192.168.1.1 www.myweb.com
最后为了方便查看nginx访问的是哪个tomcat,修改其中一台9100的服务器的 index.jsp。
代码语言:txt复制[root@192 myweb]# pwd
代码语言:txt复制/usr/local/apache-tomcat-9.0.13-9100/webapps/myweb
代码语言:txt复制[root@192 myweb]# vi index.jsp
代码语言:txt复制修改为:
代码语言:txt复制<p style="font-size:18px;">
代码语言:txt复制江山如此多娇-9100<br/>
代码语言:txt复制惜秦皇汉武略输文采,唐宗宋祖稍逊风骚<br/>
代码语言:txt复制一代天骄成吉思汗,只识弯弓射大雕<br/>
**最后通过访问页面
http://www.myweb.com/myweb/
**
再次刷新,该网页信息:
可以看出来通过nginx,可以实现简单的负载均衡
Nginx的常见轮询策略还有轮询,权重, ip_hash ,最少连接方式等。
代码语言:txt复制配置1:
代码语言:txt复制upstream backserver {
代码语言:txt复制 server 127.0.0.1:9100;
代码语言:txt复制 #其它所有的非backup机器down的时候,才请求backup机器
代码语言:txt复制 server 127.0.0.1:9200 backup;
代码语言:txt复制}
代码语言:txt复制配置2:
代码语言:txt复制 upstream backserver {
代码语言:txt复制 server 127.0.0.1:9100;
代码语言:txt复制 #down表示当前的server是down状态,不参与负载均衡
代码语言:txt复制 server 127.0.0.1:9200 down;
代码语言:txt复制}
静态的代理
把所有静态资源的访问改为访问Nginx,而不是访问Tomcat,这种方式叫静态代理。因为Nginx更擅长于静态资源的处理,性能更好,效率更高。所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
方式一:
在nginx.conf的location中配置静态资源的后缀
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ .
_.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid
|doc|ppt|pdf|xls|mp3|wma)![{ root /opt/static; } 说明 ~
表示正则匹配,也就是说后面的内容可以是正则表达式匹配 第一个点 . 表示任意字符 *表示一个或多个字符 .
是转移字符,是后面这个点的转移字符 | 表示或者
表示结尾
整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限; 否则会出现403错误 chmod 755
方式二:
在nginx.conf的location中配置静态资源所在目录实现
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ ._/(css|js|img|images) {
root /opt/static;
}
xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源.