nginx(第一篇)
目录
- nginx(第一篇)
-
- 一、 下载
- 二、在Centos7系统下安装Nginx
- 三、启动、停止、刷新
- 四、Nginx基础配置详解
- 五、反向代理+负载均衡的配置
-
- 5.1正向代理
- 5.2 反向代理
- 5.3 负载均衡
- 5.4 反向代理+负载均衡的配置
一、 下载
下载地址
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