一篇吃全Nginx全面配置以及详细部署
Nginx
Nginx应用场景:
-
http 服务器。Nginx 是⼀个 http 服务可以独⽴提供 http 服务。可以做⽹⻚静态服务器
-
虚拟主机。可以实现在⼀台服务器虚拟出多个⽹站。例如个⼈⽹站使⽤的虚拟主机
-
反向代理,负载均衡。当⽹站的访问量达到⼀定程度后,单台服务器不能满⾜⽤户的请求时,需要⽤多台服务器集群可以使⽤ nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载⾼宕机⽽某台服务器闲置的情况
安装Nginx
这里使用docker安装nginx
- 搜索nginx镜像
docker search docker
- 拉取nginx镜像
docker pull nginx
- 创建容器,设置端⼝映射、⽬录映射
# 在/root⽬录下创建nginx⽬录⽤于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf⽂件,粘贴下⾯内容
vim nginx.conf
文件内容:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
创建80.conf文件并添加如下内容
server {
listen 80; # 监听的端⼝
server_name localhost; # 域名或ip
location / { # 访问路径配置
root /usr/share/nginx/html;# 根⽬录
index index.html index.htm; # 默认⾸⻚
}
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root html;
}
}
- 创建容器
docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
- 参数说明:
- p 80:80: 将容器的 80端⼝映射到宿主机的 80 端⼝
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf: 将主机当前⽬录下的
/conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置⽬录 - -v $PWD/logs:/var/log/nginx": 将主机当前⽬录下的 logs ⽬录挂载到容器
的/var/log/nginx。⽇志⽬录
- 访问nginx
即访问虚拟机ip + 80端口
Nginx静态网站部署
静态网站的部署
将静态网页文件上传到服务器的/usr/local/nginx/html下即可访问
配置虚拟主机
虚拟主机,也叫“⽹站空间”,就是把⼀台运⾏在互联⽹上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极⼤的促进了⽹络技术的应⽤和普及。同时虚拟主机的租⽤服务也成了⽹络时代的⼀种新型经济形式。
端口绑定
- 简单创建静态文件
在/usr/local/nginx下创建文件名为index的文件夹,并创建index.html文件,内容如下
this is index.html,port=81
在/usr/local/nginx下创建文件名为regist的文件夹,并创建regist.html文件,内容如下
this is regist.html,port=82
- 修改Nginx配置文件: ~/nginx/config.d/port.conf(没有port.conf就创建该文件),内容如下
server {
listen 81; # 监听的端⼝
server_name localhost; # 域名或ip
location / { # 访问路径配置
root /usr/share/nginx/index;# 根⽬录
index index.html index.htm; # 默认⾸⻚
}
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root html;
}
}
server {
listen 82; # 监听的端⼝
server_name localhost; # 域名或ip
location / { # 访问路径配置
root /usr/share/nginx/regist;# 根⽬录
index regist.html; # 默认⾸⻚
}
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root html;
}
}
- 访问测试
分别访问虚拟机ip+81和虚拟机ip+82的俩个页面,出现如下
域名绑定
域名简单来说像www.baidu.com就是一个域名
域名级别
-
顶级域名:
例如中国是cn,美国是us,日本是jp等工商企业得到com,top等
例如 baidu.com -
二级域名
例如: map.baidu.com -
三级域名
例如: item.map.baidu.com
域名与ip绑定:
⼀个域名对应⼀个 ip 地址,⼀个 ip 地址可以被多个域名绑定
本地测试可以修改 hosts ⽂件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射关系,如果 hosts ⽂件中配置了域名和 ip 的对应关系,不需要⾛dns 服务
器。例如: 我的虚拟机ip地址为192.168.249.4,那么在上述的hosts文件下添加如下内容
192.168.249.4 www.xzk.com
192.168.249.4 regist.xzk.com
做好域名指向后,修改nginx配置文件 domain.conf(没有就创建)
server {
listen 80;
server_name www.xzk.com;
location / {
root /usr/share/nginx/cart;
index cart.html;
}
}
server {
listen 80;
server_name regist.xzk.com;
location / {
root /usr/share/nginx/search;
index search.html;
}
}
在~/usr/nginx下创建cart目录和search目录,并分别在俩个目录下创建cart.html和search.html
内容随意编写
例如: cart.html
this is cart=>server_name=www.xzk.com
search.html
this is search,server_name=regis.xzk.com
将这俩个文件夹拷贝被nginx容器当中
当前在nginx目录下
执行以下指令:
docker cp cart/ c_nginx:/usr/share/nginx
docker cp search/ c_nginx:/usr/share/nginx
重启nginx容器
docker restart c_nginx
测试访问
访问www.xzk.com出现如下界面
访问regist.xzk.com出现如下界面
这样就完成了域名的的绑定
Nginx反向代理
反向代理概念
反向代理(Reverse Proxy)⽅式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部⽹络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为⼀个反向代理服务器
正向代理如下图所示:
正向代理是针对你的客户端,而反向代理是针对服务器的,如下图
配置反向代理-准备工作
在docker中部署tomcat
- 搜索tomcat镜像
docker search tomcat
- 拉取tomcat镜像
docker pull tomcat
- 创建容器,设置端⼝映射、⽬录映射
# 在/root⽬录下创建tomcat⽬录⽤于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
- 创建容器
#这里我将容器的8080端口映射到宿主机的8081端口上,防止与nginx端口冲突
#当前是在创建好的tomcat1文件夹下
docker run -id --name=c_tomcat1 \
-p 8081:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
配置反向代理
在~/nginx/config.d/proxy.conf(没有则创建)添加如下内容
upstream tomcat-kkb{
server 192.168.249.4:8081;
}
server {
listen 80; # 监听的端⼝
server_name www.kkb.com; # 域名或ip
location / { # 访问路径配置
# root index;# 根⽬录
proxy_pass http://tomcat-kkb;
index index.html index.htm; # 默认⾸⻚
}
}
意思就是说,当访问www.kkb.com时候,会通过proxy_pass这个配置信息调到192.168.249.4:8081下,也就是上面配置的tomcat下
重新启动Nginx
在hosts文件下添加内容
192.168.249.4 www.kkb.com
测试
访问www.kkb.com出现如图
这样就完成了反向代理
Nginx负载均衡
概念
负载均衡 建⽴在现有⽹络结构之上,它提供了⼀种廉价有效透明的⽅法扩展⽹络设备和服务器的带宽、增加吞吐量、加强⽹络数据处理能⼒、提⾼⽹络的灵活性和可⽤性。
负载均衡,英⽂名称为Load Balance,其意思就是分摊到多个操作单元上进⾏执⾏,例如Web服务器、FTP服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。
配置负载均衡-准备工作
- 再创建一个tomcat容器,端口为8082
#先在/root下建立tomcat2文件夹
#进入到tomcat2文件夹下,执行如下命令
docker run -id --name=c_tomcat2 \
-p 8082:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
为了均衡是c_tomcat1还是c_tomcat2,在tomcat2目录下创建ROOT文件夹
在tomcat2文件夹的ROOT文件夹下创建index.html文件,以便区别c_tomcat1 ,内容如下
this is tomcat index.html port=8082
配置负载均衡
- 修改Nginx配置文件: lb.conf(没有则创建)
upstream tomcat-huike {
server 192.168.249.4:8081;
server 192.168.249.4:8082;
}
server {
listen 80; # 监听的端⼝
server_name www.huike.com; # 域名或ip
location / { # 访问路径配置
# root index;# 根⽬录
proxy_pass http://tomcat-huike;
index index.html index.htm; # 默认⾸⻚
}
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root html;
}
}
修改好之后重启nginx容器
docker restart c_nginx
-
修改hosts文件
添加 192.168.249.4 www.huike.com -
测试
地址输入www.huike.com,观察页面是否轮循出现tomcat1的页面和tomcat2的页面,交替显示
如果想让某一容器出现次数是其他容器的2倍,则修改配置如下:
upstream tomcat-travel {
server 192.168.249.4:8081 weight=2;
server 192.168.249.4:8082;
}
这样就完成了nginx的负载均衡配置
location = /50x.html {
root html;
}
}
修改好之后重启nginx容器
docker restart c_nginx
2. 修改hosts文件
添加 192.168.249.4 www.huike.com
3. 测试
地址输入www.huike.com,观察页面是否轮循出现tomcat1的页面和tomcat2的页面,交替显示
如果想让某一容器出现次数是其他容器的2倍,则修改配置如下:
upstream tomcat-travel {
server 192.168.249.4:8081 weight=2;
server 192.168.249.4:8082;
}
这样就完成了nginx的负载均衡配置
作者:coder_小吴
来源链接:https://blog.csdn.net/weixin_50313429/article/details/123389009
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。