前言:
这段时间,也是学习微服务准备阶段。从大架构入手,找每一个点进行学习,前面学习了docke,还有有一篇dockerfile没写,近期加紧补充理论后将发布。今天这里我们将学习nginx的几个核心点,例如:虚拟主机,反向代理,负载均衡等,学完这几个点,nginx基本就入门了。可以直接开发,当然如果要深入学习,那就不简单了。不说了,开始学习。
文章较长,但相对步骤详细,如果不好docker,请移步自 docke实战篇(一)--ubuntu下安装docker并配置镜像加速入门以及后面的博文,学习完毕后再回来阅读该文章应该更好理解。
如果在想在真机上安装请移步自nginx在centos7下安装详解,搭建好后可在该文章学习相关nginx配置。
如果您已经学会docker,请直接往下阅读。
简介:
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性: 例如:在连接高并发的情况下,Nginx是Apache服务不错的替代品,能够支持高达 50,000 个并发连接数的响应响应。
(以上内容来自百度百科,对原文做了部分删减)
首先看下配置的结构:
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
一份简单配置文件:
user nobody; #运行的用户
worker_processes 2; ##启动进程,通常设置成和cpu的数量相等,这里我设置2核
#事件
events {
worker_connections 1024; #工作连接
}
#http模块
http {
include mime.types; # #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
sendfile on; #除了是下载之类重IO的,都用on
keepalive_timeout 75; #连接超时时间,默认为75
server {
listen 80; #监听的端口
server_name www.baidu.com; #这里写自己的域名
location / {
root /usr/share/nginx/wwwroot/test; #虚拟主机转向的目录
index index.html index.htm; #默认访问的路径
}
}
}
一些配置说明:可能有些没用到,下面出现在解释
配置区域 | 说明 | |
---|---|---|
main | 配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。 | |
events | 配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。 | |
http | 可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。 | |
upstream | 配置 HTTP 负载均衡器分配流量到几个应用程序服务器。 | |
server | 配置虚拟主机的相关参数,一个 http 中可以有多个 server。 | |
location | 配置请求的路由,以及允许根据用户请求的URI来匹配指定的各 location 以进行访问配置;匹配到时,将被 location 块中的配置所处理 |
准备文件夹于文件:
sudo mkdir -p /usr/local/docker/nginx/wwwroot /usr/local/docker/nginx/conf
cd /usr/local/docker/nginx/
创建文件docker-compose.yml,文件内容如下:
version: '3'
services:
nginx:
restart: always
image: nginx
container_name: nginx
ports:
- 80:80
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./wwwroot:/usr/share/nginx/wwwroot
文件目录:
在wwwroot文件夹下创建一个index.html,内容随便写,告诉我们访问成功就是了。
进入到conf目录下,创建一个nginx.conf文件,文件夹内容分如下三种配置,可合在一起的,学习时暂且分离。
nginx配置虚拟主机:
基于IP:
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.223.129; #基于ip的访问,域名访问后面再说
location / {
root /usr/share/nginx/wwwroot;
index index.html index.htm;
}}
}
将上面的内容复制到conf目录下的nginx.conf文件内。IP需要修改成自己虚拟机IP,其他不变即可。
cd /usr/local/docker/nginx #返回nginx目录
sudo docker-compose up
访问ip:可以看到已经成功了。
基于域名:
前往C:\Windows\System32\drivers\etc自己电脑,修改hosts文件,加一个域名,我的域名加为:www.gentle.co
nginx.conf文件详情如下:
user nginx;
worker_processes 1;events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;sendfile on;
keepalive_timeout 65;
# server {
# listen 80;
# server_name 192.168.223.129;
# location / {
# root /usr/share/nginx/wwwroot;
# index index.html index.htm;
# }
#
# }# 这里是新的,域名,上面哪个是ip
server {
listen 80;
server_name gentle.com;location / {
root /usr/share/nginx/wwwroot;
index index.html index.htm;
}
}
}
如果不会关闭的,执行如下语句
sudo docker-compose down
修改完配置后,如上个基于IP的步骤执行即可。
nginx配置反向代理:
首先我们需要创建一个tomcat文件夹
sudo mkdir -p /usr/local/docker/tomcat
cd /usr/local/docker/tomcat
sudo vi docker-compose.yml
将如下内容放入docker-compose.yml,保存推出即可,然后启动容器
version: '3'
services:
tomcat1:
image: tomcat
container_name: tomcat1
ports:
- 8080:8080
修改我们docker/nginx/conf/nginx.conf文件,修改内容如下:
user nginx;
worker_processes 1;events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;sendfile on;
keepalive_timeout 65;
# 配置一个代理即 tomcat 服务器,名字要与下面
upstream tomcatserver {
server 192.168.223.129:8080; #你的虚拟机IP
}server {
listen 80;
server_name gentle.com; #上面配置的域名location / {
proxy_pass http://tomcatserver; #反向代理,将请求转发给tomcat
index index.html index.htm;
}
}
}
最后将两个容器都启动,访问试试:
反向代理的配置很简单的,看看就会了。 核心就那两个,基本和虚拟主机差不多的,学习配置即可。
nginx配置负载均衡:
修改tomcat目录下的docker-compose.yml,增加一个tomcat服务
version: '3'
services:
tomcat1:
image: tomcat
container_name: tomcat1
ports:
- 8080:8080
tomcat2:
image: tomcat
container_name: tomcat2
ports:
- 8081:8080
修改/docker/nginx/conf/nginx.conf文件
user nginx;
worker_processes 1;events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;sendfile on;
keepalive_timeout 65;
# 配置一个代理即 tomcat 服务器
upstream tomcatserver {
server 192.168.223.129:8081 weight=10; #weight加权值,值越大,请求分发给他的几率越大
server 192.168.223.129:8080 weight=10;
}server {
listen 80;
server_name gentle.com;location / {
proxy_pass http://tomcatserver;
index index.html index.htm;
}
}
}
分别启动两个容器,需要到相应的文件夹下。为了演示,我在两个tomcat的主页都加了一句话,用于分别是否成功实现负载均衡。
第一次访问:
第二次访问:
为此,负载均衡便做到了,主要是写配置,可以说没啥技术性可言,但是这个确实架构学习的必经之路,但是假设nginx死了,那就凉了,所以会有高可用的主从nginx。
总结:
nginx核心配置基本完毕,我们可以很愉快的开始整合自己的架构。如果深入学习的话,这个就相对较难。祝大家学习进步,工作顺利。
--谢谢
程序人生,与君共勉~!