目录
一、Nginx基础服务
1.简介
Nginx是一个开源、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP/POP3邮件代理服务器。它最初由 lgor Sysoev 开发,旨在解决高并发连接下的性能问题。由于其轻量级、稳定性好、低资源消耗和处理高并发连接的能力,Nginx 已成为全球最受欢迎的 Web
服务器之一单台物理服务器 可支持 30000 ~ 50000 个并发请求 。并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev 所开发,供俄国大型的入口网站及搜索引擎 Rambler (俄文: Рамблер )使用。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度 BWS 、新浪、网易、腾讯、等
Nginx官网地址
https://nginx.org
2.主要功能
静态Web资源服务器
Nginx作为Web服务器时,特别擅长处理和提供静态内容,如 HTML 文件、图片、JavaScript、CSS、文本文件(如 txt)等。其高效的事件驱动架构使得它在处理大量并发请求时表现出色。Nginx可以轻松应对高流量的静态资源请求,且资源的传输速度和响应时间都非常快
HTML:提供网页内容,通常与其他静态资源(如 CSS、JS)配合使用,构建用户可见的 Web 页面
图片:支持各种格式的图片(如 PNG、JPG、GIF 等)的快速加载和显示
JavaScript 和 CSS:提供前端脚本和样式表,确保网站的功能性和关观性
文本文件:如 txt 文件,用于提供简单的文本内容或数据
Nginx作为反向代理服务器,能够接受客户端的 HTTP/HTTPS 请求,并将这些请求转发给后端的服务器或服务。反向代理在URL层级(即第7层)上工作,这意味着它可以基于URL的内容决定将请求发送到哪台服务器
HTTP/HTTPS 代理:通过Nginx,HTTP/HTTPS 请求可以被转发到不同的后端服务器(如 Web服务器、应用服务器等),这种方式通常用于负载均衡、内容缓存或安全性增强
SSL/TLS 终止:Nginx可以作为 HTTPS 请求的终止点,处理 SSL/TLS 加密和解密,然后将解密后的请求以 HTTP 方式转发到后端服务器
反向代理动态资源请求
Nginx不仅可以处理静态内容,还可以通过与 FastCGl、uWSGI、SCGI 等协议的集成来处理动态内容请求。这些协议使Nginx能够与后端应用服务器(如 PHP、Python、Ruby 等语言的服务器)通信,处理动态生成的内容
FastCGI:常用于 PHP-FPM,Nginx将客户端请求转发给 PHP-FPM 进行处理,然后将生成的动态内容返回给客户端
uWSGI:常用于 Python 应用(如 Django、Flask),Nginx可以将请求转发给 uWSGI 守护进
程,执行 Python 代码并返回结果
SCGI:一种类似于 FastCGl 的协议,适用于其他应用场景,Nginx可将请求转发给实现了 SCGI的后端服务器
TCP/UDP协议的请求转发
Nginx也支持在 OSI 模型的第4层(传输层)进行 TCP 和 UDP 协议的反向代理。这种4层代理可以将基于 TCP 和 UDP 协议的请求转发到不同的后端服务器,适用于需要处理原始网络连接的场景
TCP 代理:Nginx可以处理各种 TCP 流量,如数据库请求(MySQL、PostgreSQL)、邮件服务(SMTP)、消息队列等,将这些请求透明地转发到后端服务器
UDP 代理:适用于基于 UDP 协议的服务,如 DNS、VOIP 服务等。Nginx能够将 UDP 请求转发到后端的服务实例,支持负载均衡和故障转移
3.主要特点
模块化设计
可扩展性:Nginx采用模块化架构,允许通过加载第三方模块来扩展其功能。这些模块可以为Nginx添加新的特性和功能,如 Lua 脚本支持、Redis 缓存等
定制化:通过模块化设计,用户可以根据需要定制 Nginx 的功能,去除不需要的功能以减少内存占用和提高性能
高可靠性
稳定性:Nginx 在处理大量并发连接时,表现稳定,不易崩溃或导致服务器过载。其架构设计使得它在高流量的情况下依然保持高效和稳定的服务
容错机制:支持自动跳过错误的后端服务器,具有很好的容错性和健壮性
支持热部署
不停机更新配置文件:Nginx支持在不中断服务的情况下重新加载配置文件。管理员可以在服务器运行时调整配置,而不会影响当前连接的用户,这对于保持在线服务的可用性至关重要
升级版本和更换日志文件:Nginx支持平滑升级,即在无需停止服务的情况下,可以升级软件版本或更换日志文件,确保服务的连续性
低内存消耗
高效的内存管理:Nginx以极低的内存占用闻名。在10000个保持活跃的连接(keep-alive 连
接)的情况下,非活动连接仅需占用约2.5MB的内存。这使得Nginx能够在处理大量连接的情
况下,依然保持较低的系统资源使用
事件驱动、AIO(异步IO)、MMAP、sendfile支持
Event-driven:Nginx使用事件驱动模型来处理网络请求,这种机制使得它能够高效地处理大量并发连接,避免了传统同步I/O处理中的阻塞问题
AIO (Asynchronous I/O):异步I/O操作使得Nginx在处理I/O请求时不会阻塞其他操作,提高了整体性能和响应速度
Mmap (Memory-mapped file I/O):通过内存映射文件I/O,Nginx能够更高效地读取和写入文件,提高了文件操作的速度
Sendfile:Nginx使用sendfile系统调用允许直接从文件系统传输数据到网络套接字,减少了用户空间和内核空间之间的数据复制,提高了传输效率
4.应用场景
Web服务器:
Nginx可用作静态文件的高效web服务器,例如 HTML、CSS、JavaScript和图像文件。它擅长处理大量并发连接,并且能够高效地提供静态内容反向代理服务器:
Nginx作为反向代理服务器,能够将客户端请求转发到后端服务器。它可以实现负载均衡、缓存、压缩、SSL/TLS终结等功能
负载均衡:
通过负载均衡功能,Nginx可以将流量分配到多个后端服务器,以分散负载、提高系统的可用性和扩展性。支持多种负载均衡算法,如轮询、最少连接、IP哈希等内容缓存:
Nginx的缓存功能可以缓存动态内容和静态内容,以减少对后端服务器的请求,从而提高响应速度和减少负载
5.Nginx相对于Apache的优点
轻量级:
Nginx使用C语言编写,内存和资源消耗极少。相比之下,Apache虽然功能强大,但其架构和模块设计导致在相同的web服务场景下占用更多的内存和CPU资源
抗并发能力强:
Nginx采用“epo11”和“kqueue”开发模型,处理请求是异步非阻塞的。一个进程可以处理多个连接,这使得Nginx在高并发环境下能够保持高效运行,资源消耗较低。而Apache采用同步多进程模型,一个连接对应一个进程,这在高并发场景下容易导致进程数激增,从而增加内存和CPU的消耗,甚至可能导致服务阻塞或崩溃
高度模块化设计:
Nginx的模块化设计使得功能扩展变得简单。开发者可以根据需求编写和加载自定义模块,而无需修改核心代码。相比之下,Apache的模块开发相对复杂,灵活性不如Nginx
配置简洁:
Nginx的配置文件简洁明了,使用正则表达式可以轻松完成复杂的URL重写、访问控制等操作。此外,Nginx提供了“-t”命令来测试配置文件的正确性,减少配置错误的风险。而Apache 的配置文件较为复杂,尤其是在需要重启服务后发现配置错误时,可能会导致服务中断
静态文件处理性能优越:
Nginx擅长处理静态文件,如HTML、CSS、JavaScript和图像文件。在处理静态内容时Nginx 的性能比Apache高出三倍以上,因此更适合用作静态资源服务器负载均衡:
Nginx作为负载均衡服务器,支持应用层(7层)的负载均衡。它可以根据请求的URL、主机名HTTP头信息等,将流量分配到不同的后端服务器,提供更精细的流量控制
反向代理和邮件代理:
Nginx本身就是一个强大的反向代理服务器,可以有效分担后端服务器的压力,并且还能作
为邮件代理服务器,处理 IMAP、POP3、SMTP 等协议的邮件流量
稳定性与热部署:
Nginx启动迅速,能够做到7*24小时不间断运行,即使在运行数月后也无需重启。它还支持热部署,即在不间断服务的情况下,可以升级软件版本或进行配置更改,而无需重启服务器,这大大提高了系统的可用性
活跃的社区:
Nginx拥有一个非常活跃的开源社区,新的高性能模块不断涌现。这使得Nginx能够快速适应新技术需求,并且用户可以很容易地找到解决方案和支持
6.Nginx架构
(1 )首先,每个 worker 进程都是从 master 进程 fork 过来,在 master 进程里面,先建立好需要listen的 **socket ( listenfd ) ** 之后,然后再 fork 出多个 worker 进程( 2 )所有 worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程会在注册 listenfd 读事件前抢 accept_mutex ,抢到互斥锁的那个进程注册 listenfd 读事件,然后在读事件里调用accept 接受该连接(解决惊群)( 3 )当一个 worker 进程在 accept 这个连接之后,就开始读取请求、解析请求、处理请求。产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了
6.1Master和Worker的工作流程
Master工作过程细节:
1.Master建立listen的socket (listenfd)
2.Master,fork出Worker进程 (fork:进程镜像)
3.新请求到来时,所有Worker进程的listenfd都变为可读
4.Worker进程,竞争accept_mutex,获胜的注册listenfd的读事件
5.Worker进程,在读事件中,accept当前连接,并处理请求Worker工作过程细节:
1.新请求到来时,所有Worker进程的listenfd都变为可读
2.Worker进程,竞争accept_mutex,获胜的注册listenfd的读事件
3.Worker进程,在读事件中,accept当前连接
4.Worker进程,读取请求、解析请求、处理请求、进行响应
7.进程结构
Web 请求处理机制(1)多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求(2)多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来跟客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web 服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS 服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定
工作进程(worker process)的功能:
(1)Worker进程的平等性:
所有Worker进程都是平等的,独立处理请求
(2)处理网络请求:Worker进程接收和处理来自客户端的网络请求
(3)Worker进程数量配置:Worker进程的数量通常设置为与CPU核心数相等,以最大化利用CPU资源。这可以避免过多
的进程竞争CPU时间,同时减少上下文切换带来的开销
(4)请求处理流程:请求接受:Worker进程接受客户的请求,
功能模块处理:将请求分发到不同的功能模块进行处理
I/O调用:执行I/O操作以获取响应数据
后端通信:与后端服务器进行通信,接收处理结果
缓存操作:访问缓存,查询和调用缓存中的数据
结果发送:将处理结果返回给客户
(5)接收主进程指令:执行主进程发出的指令,如重启、升级和退出等操作
8.nginx模块
核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能标准 HTTP 模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP 响应头设置等等可选 HTTP 模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash多媒体传输 、解析GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等邮件服务模块:主要用于支持 Nginx 的邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP 协议的支持Stream 服务模块:实现反向代理功能, 包括 TCP 协议代理( 四层)第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等
8.1常用模块
ngx_http_core_module 核心模块ngx_http_access_module 访问控制ngx_http_auth_basic_module 身份验证ngx_http_gzip_module 压缩模块ngx_http_log_module 日志模块ngx_http_proxy_module 代理模块ngx_http_rewrite_module 重写模块ngx_http_stub_status_module 状态页模块ngx_http_upstream_module 反向代理ngx_http_stream_module 四层代理
二、编译安装nginx服务
1.yum部署nginx
(1)使用 yum 部署 Nginx 需要先安装 epel-release 扩展包,官方源默认没有 Nginx 的 yum 源yum install epel-release -y②扩展源安装完后直接安装 Nginxyum install nginx -y③使用 yum 安装的 nginx配置文件位置在: /etc/nginx.conf默认根目录在: /usr/share/nginx/html默认日志文件在: /var/log/nginx
2.上传软件包并关闭防火墙
下载安装包: nginx-1.12.0.tar.gz要是有软件包直接通过ftp上传,要是没有可以去官网下载https://nginx.org/download/也可以直接下载wget https://nginx.org/download/nginx-1.12.0.tar.gz
防火墙三个熟记于心的操作:
systemctl stop firewalldsystemctl disable firewalldsetenforce 0
3.安装依赖包
nginx 的配置及运行需要 pcre 、 zlib 等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件yum -y install pcre-devel zlib-devel gcc gcc-c++ make
4.创建运行用户与组
创建运行用户、组( Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户号,以便更准确地控制其访问权限)useradd -M -s /sbin/nologin nginx
5.编译安装nginx
cd /opttar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/./configure \--prefix=/usr/local/nginx \ # 指定 nginx 的安装路径--user=nginx \ # 指定用户名--group=nginx \ # 指定组名--with-http_stub_status_module# 启用 http_stub_status_module 模块以支持状态统计操作 VTScd nginx-1.12.0/./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_modulemake && make install
6.创建软连接,让系统识别nginx命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
6.1nginx信号
常用的信号nginx -t 检查语法nginx -T 检查语法 并打印所有配置nginx -v 显示版本nginx -V 显示详细信息, 包括 编译的信息nginx -c 指定配置文件启动
nginx命令 | kill命令 | 含义 |
nginx -s relaod
|
kill -s HUP
|
重新加载配置文件
|
nginx -s stop
|
kill -9
(
KILL
)
|
立即停止
|
nginx -s quit
|
kill -3
(
QUITt
)
|
优雅的退出
|
nginx -s reopen
|
kill -s USR1
|
重新生成日志文件
|
nginx
|
kill -s USR2
|
飞行中升级
|
7.添加nginx系统服务
vim /lib/systemd/system/nginx.service[Unit]Description=nginxAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target-------------------------------------------------------------------------------------------------------------------------[Unit]: 服务的说明Description: 描述服务After: 依赖,当依赖的服务启动之后再启动自定义的服务[Service]: 服务运行参数的设置Type=forking: 是后台运行的形式,使用此启动类型应同时指定PIDFile: 以便 systemd 能够跟踪服务的主进程ExecStart: 为服务的具体运行命令ExecReload: 为重启命令ExecStop: 为停止命令PrivateTmp=True: 表示给服务分配独立的临时空间注意:启动、重启、停止命令全部要求使用绝对路径[Install]: 服务安装的相关设置,可设置为多用户---------------------------------------------------------------chmod 754 /lib/systemd/system/nginx.servicesystemctl start nginx.servicesystemctl enable nginx.service
修改权限
chmod 754 /lib/systemd/system/nginx.service启动nginx服务systemctl start nginx.servicesystemctl enable nginx.service访问网页http://172.16.58.10
三、nginx主配置文件nginx.conf
主配置文件位置vim /usr/local/nginx/conf/nginx.conf
1.全局配置
1.运行用户:
user nobody
运行Nginx的用户。如果在编译时未指定,默认为nobody
2.工作进程数量:
worker processes 4
设置Nginx的工作进程数量,通常配置为服务器核心数的2倍。如果网站访问量不大,设置为1个进程即可3.服务器硬件配置:
CPU:
2P:2个物理CPU
4C:1物理CPU有4个核心,总共2*4=8个逻辑核心
内存:
8G内存
存储:
4C 16G高效盘
系统盘:40G
存储:oss(对象存储服务)
网络存储:NAS(网络附加存储)
网络带宽:50M4.日志配置:
error log logs/error.log
错误日志文件的位置
5.PID文件位置:
pid logs/nginx.pid
PID文件的位置说明:
运行用户配置为空时,默认使用nobody
工作进程数量应根据服务器的CPU核心数来合理配置,以优化性能
服务器硬件配置包括CPU、内存、存储和网络带宽等详细参数
日志配置和PID文件位置在配置文件中可以取消注释以启用这些功能
2.I/O事件配置
1.事件模型:
use epoll
使用epoll模型。epo11是Linux 2.6及以上版本的系统内核提供的多路复用I/O接口,能够显著提高性能,特别是在处理大量并发连接时
2.工作进程连接数:
worker connections 4096
每个工作进程可以处理的最大连接数设置为4096
3.文件描述符限制:
提高每个进程的连接数,还需执行ulimit -n 65535命令临时修改本地每个进程可以同时打开的最大文件数
在Linux平台上,高并发TCP连接的处理受到系统对用户单一进程可以同时打开的文件数量限制的影响(每个TCP连接都需要一个socket句柄,socket句柄也是一个文件句柄)
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制
修改文件描述符限制的配置文件位置:/etc/security/limits.conf
4.epoll介绍:
epoll是Linux内核对传统poll模型的改进,属于Linux下多路复用I/O接口的增强版本
它能显著减少程序在大量并发连接中只有少量活跃连接时的系统CPU利用率5.连接数计算:
如果工作进程数为 8,每个进程处理 4096 个连接,则 Nginx 可以支持的最大连接数为
4096x8=32768
实际的连接数还需考虑服务器的硬件配置、网络带宽等物理条件
总结:
使用epoll能提高处理高并发连接的性能
配置worker_connections确保每个进程可以处理足够的连接数
提高连接数需要调整系统的文件描述符限制,确保它大于workerconnections设置的值
epoll改进了传统的poll,能够有效减少高并发情况下的CPU利用率
3.HTTP配置
使用“ http { }” 界定标记,包括访问日志、 HTTP 端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟Web 主机、 PHP 解析等一系列设置,其中大部分配置语句都包含在子界定标记“server { }” 内
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;
## 连接保持超时时间,单位是秒
keepalive_timeout 65;
## Web 服务的监听配置
server {
## 监听地址及端口
listen 80;
## 站点域名,可以有多个,用空格隔开
server_name www.kgc.com;
## 网页的默认字符集
charset utf-8;
## 根目录配置
location / {
## 网站根目录的位置
root html;
## 默认首页文件名
index index.html index.php;
}
## 内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
## 错误页面配置
location = /50x.html {
root html;
}
}
}
日志格式设定:$remote_addr 与 $http_x_forwarded_for 用以记录客户端的 ip 地址$remote_user :用来记录客户端用户名称$time_local : 用来记录访问时间与时区$request : 用来记录请求的 url 与 http 协议$status : 用来记录请求状态;成功是 200$body_bytes_sent :记录发送给客户端文件主体内容大小$http_referer :用来记录从哪个页面链接访问过来的$http_user_agent :记录客户浏览器的相关信息
四、实例
1.nginx的访问状态统计
先使用命令 /usr/local/nginx/sbin/nginx -V查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块cat /opt/nginx-1.12.0/auto/options | grep YES可查看 nginx 已安装的所有模块
备份配置文件
cd /usr/local/nginx/confcp nginx.conf nginx.conf.bak编辑配置文件vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
//添加 stub_status 配置//
location /status { //访问位置为 /status
stub_status on; //打开状态统计功能
access_log off; //关闭此位置的日志记录
}
}
}
重启服务,访问测试systemctl restart nginx浏览器访问 http://172.16.58.10/statusActive connections :表示当前的活动连接数server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP 握手次数、 已处理的请求数可 curl -s http://172.16.58.10/status 结合 awk 与 if 语句进行性能监控
2.基于授权的访问控制
生成用户密码认证文件
安装httpd-tools
yum install -y httpd-tools创建用户密码文件并添加用户htpasswd -c /usr/local/nginx/passwd.db zhangsan修改权限chown nginx /usr/local/nginx/passwd.dbchmod 400 /usr/local/nginx/passwd.db修改主配置文件相对应目录,添加认证配置项vim /usr/local/nginx/conf/nginx.conf
server {
location / {
...
//添加认证配置//
auth_basic "secret"; //设置密码提示框的文字信息
auth_basic_user_file /usr/local/nginx/passwd.db; //指定密码文件位置
}
}
检查配置文件是否有问题nginx -t重启服务systemctl restart nginx浏览器访问http://172.16.58.10
3.基于客户端的访问控制
访问控制规则如下:deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问规则从上往下执行,如匹配则停止,不再往下匹配
vim /usr/local/nginx/conf/nginx.conf
server {
location / {
...
//添加控制规则//
allow 172.16.58.10; //允许访问的客户端 IP
deny all; //拒绝其它 IP 客户端访问
}
}
检查配置文件
nginx -t
重启服务
systemctl restart nginx
4.基于域名的nginx虚拟主机
为虚拟主机提供域名解析echo "192.168.10.19 www.kgc.com www.benet.com" >> /etc/hosts为虚拟主机准备网页文档mkdir -p /var/www/html/benetmkdir -p /var/www/html/kgcecho "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.htmlecho "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html修改 Nginx 的配置文件vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.kgc.com; #设置域名www.kgc.com
charset utf-8;
access_log logs/www.kgc.access.log; #设置日志名
location / {
root /var/www/html/kgc; #设置www.kgc.com 的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name www.benet.com; #设置域名www.benet.com
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
重启服务
systemctl restart nginx浏览器访问http://www.kgc.comhttp://www.benet.com
5.基于IP的nginx虚拟主机
使用ifconfig
命令配置网卡别名ens33:0
并分配 IP 地址172.16.58.20
ifconfig ens33:0 172.16.58.20 netmask 255.255.255.0
vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 172.16.58.10:80; //设置监听地址172.16.58.10
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 172.16.58.20:80; //设置监听地址172.16.58.20
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重启服务
systemctl restart nginx浏览器访问http://172.16.58.10http://172.16.58.20
6.基于端口的nginx虚拟主机
vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 172.16.58.10:8080; //设置监听 8080 端口
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 172.16.58.20:8888; //设置监听 8888 端口
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重启服务systemctl restart nginx浏览器访问访问
http://172.16.58.10:8080
,应展示www.kgc.com
的内容访问
http://172.16.58.20:8888
,应展示www.benet.com
的内容