Nginx入门配置详解
Nginx入门配置详解
前言(必读):Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,在开发中很常用。本文讲解Nginx常用配置,讲解目录如下:
一、配置虚拟主机
1.1通过端口区分不同虚拟主机。
1.2通过域名区分虚拟主机。
二、配置负载均衡
2.1反向代理。
2.2配置反向代理。
2.3配置负载均衡。
Linux安装方法自行百度,以下是基于Windows版本讲解的,Windows版本安装的话只需要下载后解压就行了,除了命令稍有不同,配置文件及使用方法和Linux是一模一样的。
官网下载地址:http://nginx.org/en/download.html 选择Stable version(稳定版)下右边的Windows版本,左边是Linux版本,或者选择Legacy versions(历史版本),点击即可下载。
本文涉及的操作:
(1)Linux下常用命令:
启动Nginx:./nginx
重启Nginx:./nginx -s reload
关闭Nginx:./nginx -s quit
(2)Windows下常用命令(可进入的安装目录下,按住shift+右键,选择在此打开cmd窗口或者Powershell窗口):
启动Nginx:start .\nginx.exe
重启Nginx:.\nginx.exe -s reload
关闭Nginx:.\nginx.exe -s quit
(3)配置自定义域名:
文章中涉及的域名,其实是修改系统的hosts文件(Windows10系统在C:\Windows\System32\drivers\etc目录下)。
hosts文件的作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析,因此测试情况下,可以修改hosts文件,将自定义的域名对应IP地址。
一、配置虚拟主机
1.1通过端口区分不同虚拟主机。
如下所示,第一个虚拟主机监听的80端口,并且匹配的目录是html文件夹下的index.html;第二个虚拟主机监听的81端口,并且匹配的目录是html81文件夹下的index.html。记得先复制html文件夹并重命名为html81,修改里面的index.html。
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name localhost;
#匹配规则。
location / {
#html文件夹,相对目录,相对于安装目录,也可写成绝对路径。
root html;
#欢迎页,首页排序
index index.html index.htm;
}
}
#配置虚拟主机段
server {
#监听的81端口
listen 81;
#监听的域名
server_name localhost;
#匹配规则。
location / {
root html81;
index index.html index.htm;
}
}
配置后启动Nginx,分别访问域名localhost(不加端口默认是80端口)和localhost:81,如下图所示配置成功。至此说明我们以不同的端口访问,进而转向了不同的虚拟主机。
1.2通过域名区分虚拟主机。
如果多个网站都是要用80端口,那只能通过域名区分虚拟主机了,先简单(大概)解释一下什么是域名,域名就是网站,例如:
www.baidu.com
www.taobao.com
DNS服务器把域名解析为ip地址,保存的就是域名和ip的映射关系。
一级域名:
baidu.com
taobao.com
二级域名:
www.baidu.com
image.baidu.com
item.baidu.com
三级域名:
abc.image.baidu.com
aaa.image.baidu.com
一个域名对应一个ip地址,一个ip地址可以被多个域名绑定。
如下图所示,先复制两个html文件夹分别命名为htmla和htmlb,再修改它们的index.html,以便区分。
配置文件如下图所示,域名www.a.com和www.b.com分别对应文件夹htmla和htmlb,监听的都是80端口:
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name www.a.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配规则。
location / {
#htmla文件夹,相对目录,相对于安装目录,也可写成绝对路径。
root htmla;
index index.html index.htm;
}
}
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name www.b.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配规则。
location / {
root htmlb;
index index.html index.htm;
}
}
重新启动Nginx,访问域名www.a.com和www.b.com,分别如下图所示,至此说明我们以不同的域名访问,进而转向了不同的虚拟主机。
二、配置负载均衡
2.1反向代理。
配置负载均衡之前我们先了解什么是反向代理以及它如何配置。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
2.2配置反向代理。
我们需要的是,通过不同的域名访问Nginx,然后通过Nginx转发给不同的Tomcat(注意与“通过端口区分不同虚拟主机”的区别,它是没有进行转发到其他服务器的)。
在此我们先复制两个Tomcat,并修改Tomcat的默认主页加以区分。
tomcat-1的端口配置默认,修改tomcat-3的HTTP端口为8082(注意启动多个tomcat时,需要修改分别它们的三个端口,主要内容如下图所示)。
<Server port="8007" shutdown="SHUTDOWN">
...
<Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
Nginx配置如下,监听80端口的域名www.sohu.com,反向代理到127.0.0.1:8080的tomcat服务器,监听80端口的域名www.sina.com,反向代理到127.0.0.1:8082的tomcat服务器。
#两个域名指向同一台nginx服务器,用户访问不同的域名就转向不同的服务。
#upstream sohu和upstream sina合起来就是叫做反向代理,Nginx在中间做了一个代理服务器的角色。
#upstream sohu和location中的proxy_pass http://sohu; 相对应。
upstream sohu {
server 127.0.0.1:8080;
}
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配规则。
location / {
proxy_pass http://sohu;
index index.html index.htm;
}
}
#upstream sina和location中的proxy_pass http://sina; 相对应。
upstream sina {
server 127.0.0.1:8082;
}
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name www.sina.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配规则。
location / {
proxy_pass http://sina;
index index.html index.htm;
}
}
启动Nginx,分别访问www.sohu.com和www.sina.com,如下图所示(两个tomcat的主页之前已经分别修改),说明反向代理配置成功。
2.3配置负载均衡。
了解了反向代理及其配置后,继续配置负载均衡,因为负载均衡是需要反向代理来实现的。
再复制一个tomcat-2,修改其主页,加以区分,并修改其三个端口(参照2.2)。
Nginx配置如下,监听80端口的域名www.sohu.com,反向代理到127.0.0.1:8080的tomcat服务器,和127.0.0.1:8081的tomcat服务器,并且配置权重,分别为1,不配置默认也是为1,可以根据服务器的实际情况调整服务器权重,权重越高分配的请求越多,权重越低,请求越少。
#负载均衡,一个“对外的”服务由多个“内部的”服务提供。
#负载均衡需要通过反向代理来实现。
#upstream sohu和location中的proxy_pass http://sohu; 相对应。
upstream sohu {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
#配置虚拟主机段
server {
#监听的80端口
listen 80;
#监听的域名
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配规则。
location / {
proxy_pass http://sohu;
index index.html index.htm;
}
}
启动Nginx,多次访问www.sohu.com,发现每次都是访问到不同的tomcat主页,如下图所示(两个tomcat的主页之前已经分别修改),说明负载均衡配置成功。
至此,Nginx的主要用途及配置方法已经讲解完毕,此教程是入门的,主要是给新手一个整体观,了解Nginx可以做什么,以及怎么做(简单的配置是怎么配的),如果觉得本文不错,可以关注我。