nginx(第一篇)

导读:本篇文章讲解 nginx(第一篇),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

nginx(第一篇)

目录

一、 下载

下载地址
https://nginx.org/en/download.html
在这里插入图片描述

二、在Centos7系统下安装Nginx

2.1 准备工作安装nginx依赖的包

因为我们下载的是nginx的源代码,所有以进行编译nginx是C语言开发,建议在linux上运行,所以我们选择在linux上安装Nginx

2.1.1 gcc安装

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc

yum install gcc-c++ 

2.1.2 PCRE安装

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

 yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

2.1.3 zlib安装

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

 yum install -y zlib zlib-devel

2.1.4 openssl安装

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

 yum install -y openssl openssl-devel

2.2 上传安装包

将Linux版本的nginx拖拽到/usr/local/soft目录下
在这里插入图片描述
查看是否上传成功
在这里插入图片描述

cd /usr/local/soft
ls

2.3 解压

进入到 安装包所在目录并解压

cd /usr/local/soft
ls
tar -zxvf nginx-1.23.2.tar.gz 

2.4 重命名解压后的文件夹、并将其复制到usr/local/src/下

在这里插入图片描述

#修改文件夹的名字

mv nginx-1.23.2 nginx

#把nginx拷贝到/usr/local/src里面

cp -r nginx /usr/local/src

2.5 创建安装地址

mkdir  /usr/local/nginx 

2.6 指定安装路径

cd /usr/local/src/nginx 

执行命令
在这里插入图片描述

ll
./configure --prefix=/usr/local/nginx

2.7 编译

make

2.8 安装

make install

三、启动、停止、刷新

进入/usr/local/nginx目录
在这里插入图片描述

cd /usr/local/nginx
ll

文件说明
conf 配置文件
html 默认的静态资源目录
logs 日志
sbin 命令

3.1 启动 ./nginx

在这里插入图片描述

cd /usr/local/nginx/sbin
ls
./nginx

用浏览器来访问一下,nginx服务器默认端口号为80(可以省略)
在这里插入图片描述

3.2 停止 ./nginx -s stop

在这里插入图片描述

nginx -s stop

在这里插入图片描述

3.3 刷新 ./nginx -s reload【当配置文件发生变化之后要刷新】

在这里插入图片描述

./nginx -s reload

四、Nginx基础配置详解

4.1 Nginx配置文件说明

在/usr/local/nginx/conf目录下nginx.conf文件是nginx的配置文件。

nginx.conf

#user  nobody;
# 工作进程的数量 建议根据cpu的数量来设置工作进程的数量
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
	# 一个工作进程,设置能链接的客户端的数量
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

	# 配置服务 配置的每一个server可以对应一个网站
    server {
    	   # 监听的端口号默认为80 
        listen       80;
        # 当前服务的名称
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 设置访问的路径 对应的 响应的资源
        # 当前的设置表示访问的资源路径为/ 则响应html目录下的index.html/index.htm文件
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

4.2 端口和目录的配置

在nginx.conf文件中添加一个server节点,修改端口号就可以【自行添加。不影响原来的】
也就是一个nginx里面可以跑多个端口的项目,这个是tomcat是有本质的区别的
一个tomcat只能对应一个端口的多个项目服务
一个nginx可以对应多个端口下面的多个项目服务

 server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
   }

4.3通过域名虚拟机完成虚拟网站

在这里插入图片描述

4.3.1 创建静态项目目录和文件

cd /usr/local/nginx

在这里插入图片描述

[root@localhost test1]# mkdir test1
[root@localhost test1]# cd test1/
[root@localhost test1]# vim index.html

在这里插入图片描述
在这里插入图片描述

[root@localhost test1]# cd ..
[root@localhost test1]# mkdir test2
[root@localhost test1]# cd test2
[root@localhost test2]# vim index.html

在这里插入图片描述

4.3.2 修改nginx.conf配置文件

cd /usr/local/nginx/conf

打开nginx.conf

修改nginx.conf配置文件
修改配置后需要重新加载配置文件
nginx.conf部分

server {
        listen       80;
        server_name  test1.powernode.com;
        location / {
            root   test1;
            index  index.html index.htm;
        }
   }
server {
        listen       80;
        server_name  test2.powernode.com;
        location / {
            root   test2;
            index  index.html index.htm;
        }
   }

nginx.conf全部

#user  nobody;
# 工作进程的数量 建议根据cpu的数量来设置工作进程的数量
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
	# 一个工作进程,设置能链接的客户端的数量
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
    		listen 80;
    		server_name test1.powernode.com; #用来对应访问的域名

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

    server {
    		listen 80;
    		server_name test2.powernode.com; #用来对应访问的域名

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

#	# 配置服务 配置的每一个server可以对应一个网站
#    server {
#    	   # 监听的端口号默认为80 
#        listen       80;
#        # 当前服务的名称
#        server_name  localhost;
#
#        #charset koi8-r;
#
#        #access_log  logs/host.access.log  main;
#
#        # 设置访问的路径 对应的 响应的资源
#        # 当前的设置表示访问的资源路径为/ 则响应html目录下的index.html/index.htm文件
#        location / {
#            root   html;
#            index  index.html index.htm;
#        }
#
#        #error_page  404              /404.html;
#
#        # redirect server error pages to the static page /50x.html
#        #
#        error_page   500 502 503 504  /50x.html;
#        location = /50x.html {
#            root   html;
#        }
#
#        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#        #
#        #location ~ \.php$ {
#        #    proxy_pass   http://127.0.0.1;
#        #}
#
#        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#        #
#        #location ~ \.php$ {
#        #    root           html;
#        #    fastcgi_pass   127.0.0.1:9000;
#        #    fastcgi_index  index.php;
#        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#        #    include        fastcgi_params;
#        #}
#
#        # deny access to .htaccess files, if Apache's document root
#        # concurs with nginx's one
#        #
#        #location ~ /\.ht {
#        #    deny  all;
#        #}
#    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

4.3.3 修改windows 的host文件指定域名的ip地址

修改windows 的host文件指定域名的ip地址
修改
C:\Windows\System32\drivers\etc下的hosts文件
在后面加上
192.168.111.140 test1.powernode.com
192.168.111.140 test2.powernode.com
然后可以通过访问test1.powernode.com或者test2.powernode.com进行访问nginx。
需要注意的是host文件的名字要和nginx.conf文件的server_name相同。

在这里插入图片描述

4.3.4 刷新nginx的配置

在这里插入图片描述

cd /usr/local/nginx/sbin
ls
./nginx -s reload

在这里插入图片描述
在这里插入图片描述

4.4 location规则配置

4.4.1语法规则

语法规则: location [=||*|^~] /uri/ { … }
= 开头表示精确匹配

~ 开头表示区分大小写的正则匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~* 开头表示不区分大小写的正则匹配

!~ 和!~*分别为区分大小写 不匹配 及不区分大小写 不匹配的正则

/ 通用匹配,任何请求都会匹配到。

匹配原则

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

4.4.2规则例子

location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ .(gif|jpg|png|js|css)$ {
#规则D
}
location ~* .png$ {
#规则E
}
location !~ .xhtml$ {
#规则F
}
location !~* .xhtml$ {
#规则G
}
location / {
#规则H
}

4.4.3规则效果

那么产生的效果如下:
访问根目录/, 比如http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到 规则C
访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如tomcat(jsp),nginx作为方向代理服务器存在。

五、反向代理+负载均衡的配置

在这里插入图片描述

5.1正向代理

拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~
我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,科学上网工具 Shadowsocks 扮演的就是典型的正向代理角色。
比如我想访问www.google.com,要想翻越这堵墙,你可以在国外用Shadowsocks来搭建一台代理服务器,代理帮我们请求www.google.com,代理再把请求响应结果再返回给我。
在这里插入图片描述

5.2 反向代理

还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的至于钱到底是谁的,A是不知道的;这里的C扮演着一个反向代理的角色,客户不知道真正提供服务的人是谁。
反向代理隐藏了真实的服务端,当我们访问www.baidu.com的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了。www.baidu.com就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到提供真实服务的服务器那里去。Nginx就是性能非常好的反向代理服务器,它可以用来做负载均衡。
在这里插入图片描述

5.3 负载均衡

网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。
  nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
Nginx负载均衡一些基础知识:
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
在这里插入图片描述

5.4 反向代理+负载均衡的配置

5.4.1 复制两个Tomcat

在这里插入图片描述

cd /usr/local/tomcat
ls
cp -r tomcat1 tomcat2
cp -r tomcat1 tomcat3
ls

5.4.2 修改tomcat的配置文件

修改tomcat1的配置文件

在这里插入图片描述

在这里插入图片描述

修改tomcat2的配置文件

在这里插入图片描述
在这里插入图片描述

修改tomcat3的配置文件

在这里插入图片描述
在这里插入图片描述

5.4.3.1 方案一:修改tomcat下webapps下ROOT下的index.jsp

修改tomcat1下webapps下ROOT下的index.jsp

在这里插入图片描述
在这里插入图片描述

修改tomcat2下webapps下ROOT下的index.jsp

在这里插入图片描述
在这里插入图片描述

修改tomcat3下webapps下ROOT下的index.jsp

在这里插入图片描述

在这里插入图片描述

5.4.3.2 方案二:删除tomcat下webapps下的ROOT目录,在IDEA中将web项目打包,并将打好的包重命名为ROOT.war上传到webapp目录下

tomcat1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tomcat2

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

tomcat3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4.4 修改nginx的配置文件

在这里插入图片描述

5.4.4.1 针对上述方案一的修改

在这里插入图片描述

 upstream www.hhh.com{
    		server 192.168.111.142:8081;
    		server 192.168.111.142:8082;
    		server 192.168.111.142:8083;
    }

    server{
    		listen 80; #浏览器访问虚拟机IP地址后面的端口号
    		server_name www.hhh.com;

    		location / {
    		  proxy_pass http://www.hhh.com;
    		}
    }
5.4.4.2 针对上述方案二的修改

在这里插入图片描述

  upstream www.hhh.com{
    		server 192.168.111.139:8081;
    		server 192.168.111.139:8082;
    		server 192.168.111.139:8083;
    }

    server{
    		listen 9999; #浏览器访问虚拟机IP地址后面的端口号
    		server_name www.hhh.com;

    		location / {
    		  proxy_pass http://www.hhh.com;
    		}
    }

5.4.5 启动nginx

在这里插入图片描述

cd /usr/local/nginx/sbin
ls
./nginx

5.4.6 分别启动3台Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cd /usr/local/tomcat/tomcat1/bin
 ./startup.sh 
cd /usr/local/tomcat/tomcat2/bin
 ./startup.sh 
 cd /usr/local/tomcat/tomcat3/bin
 ./startup.sh 

5.4.7 通过浏览器分别访问Tomcat的三个端口号(8081、8082、8083)

5.4.7.1 针对上述方案一的访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4.7.2 针对上述方案二的访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4.8 通过浏览器测试负载均衡的轮巡

5.4.8.1 针对方案一的负载均衡测试

在这里插入图片描述

5.4.8.2 针对方案二的负载均衡测试

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/85540.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!