nginx(第一篇)(powernode)
  RJCgDuLe7QUR 2023年11月02日 74 0

nginx(第一篇)(powernode)

@TOC

一、 下载

下载地址

​https://nginx.org/en/download.html​

nginx(第一篇)(powernode)_nginx

二、在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目录下

nginx(第一篇)(powernode)_html_02

查看是否上传成功

nginx(第一篇)(powernode)_配置文件_03

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/下

nginx(第一篇)(powernode)_nginx_04

#修改文件夹的名字

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

执行命令

nginx(第一篇)(powernode)_nginx_05

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

2.7 编译

make

2.8 安装

make install

三、启动、停止、刷新

进入/usr/local/nginx目录

nginx(第一篇)(powernode)_配置文件_06

cd /usr/local/nginx
ll

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

3.1 启动 ​​./nginx​

nginx(第一篇)(powernode)_nginx_07

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

用浏览器来访问一下,nginx服务器默认端口号为80(可以省略)

nginx(第一篇)(powernode)_nginx_08

3.2 停止 ​​./nginx -s stop​

nginx(第一篇)(powernode)_nginx_09

nginx -s stop

nginx(第一篇)(powernode)_配置文件_10

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

nginx(第一篇)(powernode)_配置文件_11

./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通过域名虚拟机完成虚拟网站

nginx(第一篇)(powernode)_html_12

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

cd /usr/local/nginx

nginx(第一篇)(powernode)_配置文件_13

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

nginx(第一篇)(powernode)_html_14

nginx(第一篇)(powernode)_配置文件_15

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

nginx(第一篇)(powernode)_配置文件_16

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相同。

nginx(第一篇)(powernode)_nginx_17

4.3.4 刷新nginx的配置

nginx(第一篇)(powernode)_配置文件_18

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

nginx(第一篇)(powernode)_nginx_19

nginx(第一篇)(powernode)_配置文件_20

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作为方向代理服务器存在。

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

nginx(第一篇)(powernode)_html_21

5.1正向代理

拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,科学上网工具 Shadowsocks 扮演的就是典型的正向代理角色。

nginx(第一篇)(powernode)_配置文件_22

5.2 反向代理

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

nginx(第一篇)(powernode)_nginx_23

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(第三方)

nginx(第一篇)(powernode)_nginx_24

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

5.4.1 复制两个Tomcat

nginx(第一篇)(powernode)_配置文件_25

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

5.4.2 修改tomcat的配置文件
修改tomcat1的配置文件

nginx(第一篇)(powernode)_配置文件_26

nginx(第一篇)(powernode)_html_27

修改tomcat2的配置文件

nginx(第一篇)(powernode)_html_28

nginx(第一篇)(powernode)_nginx_29

修改tomcat3的配置文件

nginx(第一篇)(powernode)_html_30

nginx(第一篇)(powernode)_nginx_31

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

nginx(第一篇)(powernode)_html_32

nginx(第一篇)(powernode)_nginx_33

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

nginx(第一篇)(powernode)_配置文件_34

nginx(第一篇)(powernode)_配置文件_35

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

nginx(第一篇)(powernode)_配置文件_36

nginx(第一篇)(powernode)_nginx_37

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

nginx(第一篇)(powernode)_配置文件_38

nginx(第一篇)(powernode)_html_39

nginx(第一篇)(powernode)_配置文件_40

tomcat2

nginx(第一篇)(powernode)_html_41

nginx(第一篇)(powernode)_nginx_42

nginx(第一篇)(powernode)_nginx_43

tomcat3

nginx(第一篇)(powernode)_配置文件_44

nginx(第一篇)(powernode)_配置文件_45

nginx(第一篇)(powernode)_nginx_46

5.4.4 修改nginx的配置文件

nginx(第一篇)(powernode)_nginx_47

5.4.4.1 针对上述方案一的修改

nginx(第一篇)(powernode)_nginx_48

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 针对上述方案二的修改

nginx(第一篇)(powernode)_配置文件_49

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

nginx(第一篇)(powernode)_nginx_50

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

5.4.6 分别启动3台Tomcat

nginx(第一篇)(powernode)_配置文件_51

nginx(第一篇)(powernode)_配置文件_52

nginx(第一篇)(powernode)_html_53

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 针对上述方案一的访问

nginx(第一篇)(powernode)_配置文件_54

nginx(第一篇)(powernode)_nginx_55

nginx(第一篇)(powernode)_配置文件_56

5.4.7.2 针对上述方案二的访问

nginx(第一篇)(powernode)_配置文件_57

nginx(第一篇)(powernode)_配置文件_58

nginx(第一篇)(powernode)_html_59

5.4.8 通过浏览器测试负载均衡的轮巡
5.4.8.1 针对方案一的负载均衡测试

nginx(第一篇)(powernode)_配置文件_60

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

nginx(第一篇)(powernode)_nginx_61

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

RJCgDuLe7QUR
作者其他文章 更多