背景
今天这篇文章还是nginx系列,前面咱们简单介绍了nginx如何安装以及对一些基础的配置参数进行了说明。今天咱们接上章内容,浅谈一下nginx如何配置虚拟主机吧。
虚拟主机就是将一台实际的物理服务器分成多台虚拟的服务器,每台虚拟服务器都可以通过nginx配置不同的web服务。利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。
配置虚拟主机,总共有三种方式,1)基于多IP;2)基于多端口;3)基于多域名。其中基于多域名是企业中最常用的一种方式,基于多端口的方式,主要用于本机配置项目。
配置虚拟主机
1. 基于ip
基于ip的虚拟主机,顾名思义就是服务器配置多个ip,外部通过不同的ip访问不同的web网站。配置如下:
server {
listen 80;
server_name 192.168.65.129;
location / {
root /nginx/129;
index index.html;
}
}
server {
listen 80;
server_name 192.168.65.130;
location / {
root /nginx/130;
index index.html;
}
}
通过192.168.65.129去访问web服务器,默认访问的是/nginx/129/index.html文件;
通过192.168.65.129去访问web服务器,默认访问的是/nginx/130/index.html文件
2. 基于端口
server {
listen 8081;
server_name xhz.com;
location / {
root /nginx/xhz;
index index.html;
}
}
server {
listen 8082;
server_name flf.com;
location / {
root /nginx/flf;
index index.html;
}
}
通过xhz.com:8081访问web服务器,默认访问的是/nginx/xhz/index.html文件
3. 基于域名
server {
listen 80;
server_name flf.com;
autoindex on;
location / {
root /nginx/flf;
index index.html;
}
}
通过flf.com访问web服务器,默认访问的是/nginx/flf/index.html文件
为什么通过flf.com访问的是/nginx/flf/index.html文件?
1. 在访问一个网站的时候,我们一般都是通过域名,但是在网站栏看到的url地址会是http://flf.com/
2. url地址的组成:http(https,ftp)访问协议;// 分隔符 ;flf.com 域名;/ 根
3. 在定义虚拟主机的的配置文件中,root /nginx/flf ==> / /nginx/flf,因此在访问http://flf.com/的时候实际上访问的是http://xhz.com/nginx/flf
4. index index.html 则表示默认访问index.html文件。
虚拟主机常用模块
1. ngx_http_autoindex_module模块
官网连接:Module ngx_http_autoindex_module
在访问web服务器的时候,默认回去访问根下面的index.html文件,假如当根下的index.html的文件不存在时,会包403的错误。开启autoindex on后,当找不到index.html的文件时,会将请求传递给 ngx_http_autoindex_module 模块,从而页面是以目录结构进行展示。
1.1 语法
## 开启没有index.html文件时,页面是以目录结构进行展示
Syntax: autoindex on | off;
Default: autoindex off;
## 作用域,可以卸载http层,server层,location层
Context: http, server, location
## 显示目录结构中各个文件的大小
Syntax: autoindex_exact_size on | off;
Default:
autoindex_exact_size on;
Context: http, server, location
## 开启显示本地时间
Syntax: autoindex_localtime on | off;
Default:
autoindex_localtime off;
Context: http, server, location
1.2 示例
server {
listen 80;
server_name autoindex.com;
location / {
root /nginx/auto_index;
index index.html;
autoindex on;
# 开启显示文件大小
autoindex_exact_size on;
# 开启显示本地时间
autoindex_localtime on;
}
}
2. ngx_http_auth_basic_module模块
ngx_http_auth_basic_module 模块允许通过使用“HTTP 基本身份验证”协议验证用户名和密码来限制对资源的访问。访问也可以通过地址、子请求的结果或 JWT 来限制。 通过地址和密码同时限制访问由满足指令控制。
2.1 语法
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
## 描述信息
Syntax: auth_basic string | off;
Default:
auth_basic off;
Context: http, server, location, limit_except
## 指导密码认证的账号密码的保存文件
Syntax: auth_basic_user_file file;
Default: —
Context: http, server, location, limit_except
2.2 示例
设置账号密码
root@xhz-uos:/etc/nginx/conf.d# htpasswd -c -b /nginx/pass/htpasswd xhz qwer123
Adding password for user xhz
root@xhz-uos:/etc/nginx/conf.d#
server {
listen 80 default_server;
server_name autoindex.com;
root /nginx/auto_index;
location / {
index index.html;
autoindex on;
# 开启显示文件大小
autoindex_exact_size on;
# 开启显示本地时间
autoindex_localtime on;
}
location /apt {
auth_basic "closed site";
## 指定账号密码保存的路径
auth_basic_user_file /nginx/pass/htpasswd;
}
}
nginx的模块太过丰富,像nginx的主要功能负载均衡就是通过模块来实现的,随着后续一步步的深入,在慢慢的介绍更多的模块吧。