Nginx

Nginx 简介

  • Nginx (engine x) 是一个高性能的 Web 服务器反向代理服务器,也可以作为邮件代理服务器。

  • 占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx 官方测试为5万并发请求。(不同环境结果不同)

  • 与 Nginx 同类型的 Web 服务器还有 Apache、Lighttpd(音同lighty)、Tengine(阿里巴巴的) 等

  • Nginx 的并发处理能力在同类型的 Web 服务器中表现极好(Apache、Lighttpd),在全世界范围内大量的网站使用了 Nginx,国内互联网中也大量使用了 Nginx,比如:淘宝、新浪、搜狐、网易、美团等。

  • 其是采用 C 语言开发编写的

  • Nginx 只能部署静态资源;动态资源(如 jsp,servlet)不能放到 Nginx 上部署,无法识别

  • Nginx 主要应用:

    • 静态网站部署

    • 负载均衡

    • 静态代理

    • 动静分离

    • 虚拟主机

Nginx 反向代理和正向代理

  • 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
  • 正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。正向代理举例:FQ使用 VPN

总结:

  • 综上所述:正向代理代理对象是客户端,反向代理代理对象是服务端。
  • 软件层面一般常用 Nginx 来做反向代理服务器,它的性能非常好,用来做负载均衡。

Nginx 环境搭建

免费开源版的官方网站:http://nginx.org

Nginx 有 Windows 版本和 Linux 版本,但更推荐在 Linux 下使用 Nginx;(实际开发全是用 Linux)

下载 nginx-1.14.2.tar.gz 的源代码文件:wget http://nginx.org/download/nginx-1.14.2.tar.gz(不推荐,断网下载失败,需重下,不支持断点续传);推荐在 windows 上下载后传到 Linux 上。

我的习惯,将下载或者上传的安装文件放到 /home/soft/ 目录下

Linux 中文件上传和下载命令

  • rz:进行文件上传,同名文件会添加相关后缀进行区分,不会覆盖。

  • rz -y:进行文件上传并覆盖,如果上传的文件和上传位置中文件同名,则进行文件覆盖!

  • sz xxx:将指定文件下载到 Windows 中

安装 Nginx

步骤:(在 Linux 环境下)

  1. 准备好需要安装的 Linux 版本的 Nginx 安装包

  2. Nginx 的安装需要确定 Linux 安装相关的几个库,否则配置和编译会出现错误,直接使用命令:

    yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
    
  3. 将 Nginx 安装包上传到 /home/soft/ 路径下(根据自己习惯),解压,执行:tar -zxvf xxx

    PS:可直接输入rz命令选择文件进行上传;或使用上传工具进行上传!

    rz:进行文件上传,同名文件会添加相关后缀进行区分,不会覆盖。

    rz -y:进行文件上传并覆盖,如果上传的文件和上传位置中文件同名,则进行文件覆盖!

  4. 进入解压后的 Nginx 主目录,配置安装路径信息,执行:

    ./configure --prefix=/usr/local/nginx
    
  5. 编译,执行:make

  6. 安装,执行:make install

  7. 安装完后可在 /usr/local下看到安装好的 nginx

启动 Nginx

两种启动方式:(如果启动失败,则可能之前安装过,查看运行的 Nginx 进程,关掉重新启动即可)

  1. 普通方式启动:切换到 nginx 安装目录的 sbin 目录下,执行:./nginx

  2. 配置文件方式启动:

    这是使用相对路径启动的:
    ./nginx -c /usr/local/nginx/conf/nginx.conf
    
    这是使用绝对路径启动的:
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    其中-c是指定配置文件,而且配置文件路径必须指定绝对路径
    

检查是否启动成功

  1. 查看进程:使用ps -ef | grep nginx

    说明:

    nginx 体系结构由 master 进程和其 worker 进程组成;

    master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理;

    Nginx 启动后,安装目录下会出现一些 _tmp 结尾的文件,这些是临时文件,不用管。

  2. 浏览器输入安装 Nginx 的主机的公网 IP + Nginx 的端口(默认是80)进行访问测试:如:47.103.71.201:80/

    注意:

    如果是虚拟机上安装的 Nginx,则 IP 就是虚拟机的 IP;如果是云服务器上安装的,则 IP 就是云服务器的公网 IP

    Nginx 的端口默认是 80,访问时不加端口,默认使用的也是 80端口

启动成功,访问失败,可尝试如下检查:

  • 如果是云服务器,检查是否将 80 端口加入安全组

  • 检查访问地址是否正确

  • 查看防火墙问题,可能需要关闭防火墙

  • 如果是 Linux,基本上无法访问是因为没有关防火墙!

    查看防火墙状态:
    firewall-cmd --state
    
    设置防火墙:
    停止并禁用开机启动
    systemctl disable firewalld
    禁用防火墙
    systemctl stop firewalld
    

仍无法访问参考:https://blog.csdn.net/yujing1314/article/details/105225325

关闭或重启 Nginx

优雅关闭

  1. 找出 nginx 的进程号:ps -ef | grep nginx
  2. 执行命令:kill -QUIT 主进程pid

其中 pid 是主进程号的 pid(master process),其他为子进程 pid(worker process)

这种关闭方式会处理完请求后再关闭,所以称之为优雅的关闭。【实际,处理完请求可能需要很长时间,看场景,开发中不常用】

快速关闭

  1. 找出 nginx 的进程号:ps -ef | grep nginx
  2. 执行命令:kill -TERM 主进程pid

其中 pid 是主进程号的 pid(master process),其他为子进程 pid(worker process)

这种关闭方式不管请求是否处理完成,直接关闭,比较暴力,称之为快速的关闭。

重启 Nginx

  • 使用绝对路径:/usr/local/nginx/sbin/nginx -s reload
  • 在 nginx 安装目录的 sbin 下使用:./nginx -s reload
  • 场景:一般在修改完配置文件之后可以该命令重启 Nginx

配置文件语法检查

  • 当修改 Nginx 配置文件后,可以使用 Nginx 命令进行配置文件语法检查,用于检查 Nginx 配置文件是否正确。

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
    

查看 Nginx 版本

只查看版本信息:
./nginx -v

同时查看版本以及Nginx安装路径信息:
./nginx -V

配置文件解读

  • 配置文件讲解参考:https://www.bilibili.com/video/BV11V411C7r9?p=9

  • 学习 Nginx 首先需要对它的核心配置文件有一定的认识,这个文件位于 Nginx 的安装目录 /usr/local/nginx/conf 目录下,名字为nginx.conf

  • Nginx 的核心配置文件主要由三个部分构成:基础配置、events 配置、http 配置

  • 建议修改配置文件不要在 Linux 中使用 vim ,建议下载配置文件到 Windows 中修改后上传覆盖。

  • 以下为各配置中文解释:(需要配置时参考使用)

#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
#user  nobody;  
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes  1;  

#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
error_log  logs/error.log;  
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;  #配置进程pid文件 


###====================================================


#配置工作模式和连接数
events {
    worker_connections  1024;  #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
}

###===================================================


#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
    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日志及存放路径,并使用上面定义的main日志格式
    #access_log  logs/access.log  main;

    sendfile        on;  #开启高效文件传输模式
    #tcp_nopush     on;  #防止网络阻塞

    #keepalive_timeout  0;
    keepalive_timeout  65;  #长连接超时时间,单位是秒

    #gzip  on;  #开启gzip压缩输出
	
	###-----------------------------------------------
	

    #配置虚拟主机
    server {
        listen       80;  #配置监听端口
        server_name  localhost;  #配置服务名

        #charset koi8-r;  #配置字符集

        #access_log  logs/host.access.log  main;  #配置本虚拟主机的访问日志

	#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
        location / {
	    #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
            root   html;  
	    #配置首页文件的名称
            index  index.html index.htm;  
        }		

        #error_page  404              /404.html;  #配置404页面
        # redirect server error pages to the static page /50x.html
        #error_page   500 502 503 504  /50x.html;  #配置50x错误页面
        
	#精确匹配
	location = /50x.html {
            root   html;
        }

		#PHP 脚本请求全部转发到Apache处理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

		#PHP 脚本请求全部转发到FastCGI处理
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

		#禁止访问 .htaccess 文件
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

	
	#配置另一个虚拟主机
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

	
	#配置https服务,安全的网络传输协议,加密传输,端口443,运维来配置
	#
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

静态网站部署

Linux 中文件上传和下载命令:

  • rz:进行文件上传,同名文件会添加相关后缀进行区分,不会覆盖。

  • rz -y:进行文件上传并覆盖,如果上传的文件和上传位置中文件同名,则进行文件覆盖!

  • sz xxx:将指定文件下载到 Windows 中

示例:(将名为 ace 的静态网站部署到 Nginx)(ace 静态网站下有 login.html 文件)

  1. 在 Linux 中,进入 Nginx 的 conf 目录下,如 cd /usr/local/nginx/conf,可选择先备份 nginx.conf 主配置文件;使用 cp nginx.conf nginx_backup,conf;使用 sz nginx.conf将文件下载到电脑上,进行如下修改:

  2. 在虚拟主机的 server 中,配置服务器的默认根目录和首页文件名称。(在 server 下,复制一份 location 进行如下配置)

    下面的 ace 是静态网站名;将根目录配置到 /opt/www;配置首页文件为 login.html。(首页文件可不配置)

    location /ace {
    	root   /opt/www;
    	index  login.html;
    }
    

    配置示例说明:也可直接参考上面的详细配置说明

    #默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
        location / {
        #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
        root   html;  
        #配置首页文件的名称
    	index  index.html index.htm;  
    }	
    
  3. 回到 Linux,在 /usr/local/nginx/conf 目录下,使用 rz -y将 修改后的 nginx.conf 文件上传上去,并覆盖原文件。

  4. /opt/下创建名为 www 的目录,将 ace 静态网站上传到该目录下(可使用 Xftp 工具上传)

  5. 重启 Nginx,执行:/usr/local/nginx/sbin/nginx -s reload

  6. 输入地址进行访问测试:http://47.103.71.201/ace

负载均衡(常用)

概述

  • 在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

  • 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。

负载均衡实现方式

硬件负载均衡

  • 比如 F5、深信服、Array 等

  • 优点是有厂商专业的技术服务团队提供支持,性能稳定

  • 缺点是费用昂贵,对于规模较小的网络应用成本太高

软件负载均衡

  • 比如 Nginx、LVS、HAProxy 等
  • 优点是免费开源,成本低廉

Nginx 实现负载均衡

  • 实现方式:Nginx 通过在 nginx.conf 文件进行配置即可实现负载均衡。

示例:(先配置两个 Tomcat,在两个 Tomcat 上部署同一个 myweb 项目,将两个 Tomcat 集群运行,通过配置 Nginx 来将访问 myweb 项目的请求分发到两个 tomcat 上,实现均衡访问。)

  1. 将 tomcat 压缩包上传到 /home/soft下,使用解压命令解压到 /usr/local/下;然后复制两份,分别重命名为 tomcat8001 和 tomcat8002;分别在两个 tomcat 的 comf/server.xml 文件中修改端口号,其 server.xml 文件中的三个端口号都需要修改(三个端口号都和另外一个 tomcat 的不同才能同时运行起来),而其中的访问端口号分别可改为对应的命名的端口 8001 和 8002,这样好区分。

  2. 将 myweb 项目分别部署到两个待运行的 tomcat/webapps 目录下,并删除其余多余的网站资源

  3. 分别启动两个 tomcat,输入地址进行访问测试,以上,则成功配置了两个 tomcat 集群。(此时是通过不同端口进行访问)

  4. 以下,需要配置 Nginx,提供对 web 项目统一的访问入口,通过 Nginx 来访问两个 tomcat 中相同的 myweb 项目。

  5. 将 Nginx 的配置文件 /nginx/conf/ 下的 nginx.conf 文件下载到电脑上,进行如下添加配置:

    添加并配置 server 下的 location(拷贝一份 location 进行配置):

    说明:/myweb 为访问的根目录;http:// + www.myweb.com 为一个标识,其中 www.myweb.com 可自定义

    location /myweb {
    	proxy_pass http://www.myweb.com;
    }
    

    在 server 外,http 中,创建并配置 upstream:(推荐在 server 的上一行自行创建配置!)

    说明:www.myweb.com 为在 server 中的 location 中配置的 http:// 后的自定义标识;upstream 中的 server 为指定的访问机器。

    upstream www.myweb.com {
    	server 192.168.154.128:8001;
    	server 192.168.154.128:8002;
    }
    
  6. 使用 rz -y 将配置好的 nginx.conf 文件上传并覆盖

  7. 重启 Nginx,执行 /usr/local/nginx/sbin/nginx -s reload

  8. 输入地址 http://192.168.154.128/myweb/进行访问测试

配置总结:(还可配置访问权重;不配置的话,默认采用轮询策略,即两个 tomcat 轮次进行访问)

A、	在http模块加上upstream配置
upstream www.myweb.com { 
     	server  127.0.0.1:9100 weight=3; 
      	server  127.0.0.1:9200 weight=1;  
} 
其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器
B、	在server模块里添加location,并配置proxy_pass
location /myweb {
	proxy_pass http://www.myweb.com;
}
其中 www.myweb.com 字符串要和 upstream 后面的字符串相等

Nginx 常用负载均衡策略

轮询策略(默认)

  • 轮询策略是一种实现简单,却很常用的负载均衡策略,核心思想是服务器轮流处理用户请求,以尽可能使每个服务器处理的请求数相同。生活中也有很多类似的场景,比如,学校宿舍里,学生每周轮流打扫卫生,就是一个典型的轮询策略。

  • 在负载均衡领域中,轮询策略主要包括顺序轮询和加权轮询两种方式

  • 轮询策略的优点就是,实现简单,且对于请求所需开销差不多时,负载均衡效果比较明显,同时加权轮询策略还考虑了服务器节点的异构性,即可以让性能更好的服务器具有更高的优先级,从而可以处理更多的请求,使得分布更加均衡。

  • 询策略的缺点是,每次请求到达的目的节点不确定,不适用于有状态请求的场景。并且,轮询策略主要强调请求数的均衡性,所以不适用于处理请求所需开销不同的场景。

  • 注意:使用轮询策略最好保证多个机器的性能和处理速度一致,不然容易导致请求堆积。

  • 如果后端服务器 down 掉,将自动剔除。

  • 配置示例:

    upstream backserver { 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
    } 
    

权重策略

  • 每个请求按一定比例分发到不同的后端服务器,weight 值越大访问的比例越大,用于后端服务器性能不均的情况。

  • 配置示例:

    upstream backserver { 
    	server 192.168.0.14 weight=5; 
    	server 192.168.0.15 weight=2; 
    } 
    

ip_hash 策略

  • ip_hash 也叫 IP 绑定,每个请求按访问 ip 的 hash 值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题。

  • 缺点:当访问的 ip 不同时,根据 ip 的 hash 值分配到的服务器可能相同,这种情况可能导致同一个服务器压力过大。

  • 配置示例:

    upstream backserver { 
    	ip_hash; 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
    }
    

最少连接策略

  • web 请求会被转发到连接数最少的服务器上

  • 注意:如果请求少的机器处理速度慢,可能会导致该机器处理压力过大!

  • 配置示例:

    upstream backserver { 
        least_conn;
        server 127.0.0.1:8080; 
        server 127.0.0.1:9090; 
    }	
    

负载均衡其他几个配置

指定 backup 机器

  • 指定 backup 机器的配置:

  • 作用:其它所有的非 backup 机器全部 down 的时候,才请求 backup 机器

  • 使用场景:

    热部署,热更新(不出现访问时一会新数据,一会旧数据):先更新完 backup 服务器,然后关闭其他一半的服务器,对其进行更新;更新完后,在启动这一半的已经更新完的服务器的同时,关闭另一半的未更新的服务器;其间可能会出现全部机器 down 的情况,则此时会请求已经更新好的 backup 机器;然后将另一半的服务器全更新完后,将其启动即可,完成所有服务器的更新操作。

  • 配置示例:

    upstream backserver { 
    	server 127.0.0.1:9100;
    	#其它所有的非backup机器down的时候,才请求backup机器
    	server 127.0.0.1:9200 backup; 
    } 
    

指定 down 机器(了解)

  • 指定 down 机器的配置:

  • 作用:down 表示当前的 server 是 down 状态,不参与负载均衡(该机器启动后也不参与负载均衡)

  • 配置示例:

    upstream backserver { 
        server 127.0.0.1:9100;
        #down表示当前的server是down状态,不参与负载均衡
        server 127.0.0.1:9200 down; 
    } 
    
    一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。
    reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级...
    

静态代理

  • 把所有静态资源的访问改为访问 nginx,而不是访问 tomcat,这种方式叫静态代理。
  • 因为 nginx 更擅长于静态资源的处理,性能更好,效率更高。
  • 所以在实际应用中,我们将静态资源比如图片、css、html、js 等交给 nginx 处理,而不是由 tomcat 处理。

Nginx 静态代理实现方式

方式一(不推荐)

方式一:在 nginx.conf 的 location 中配置静态资源的后缀(不推荐)

  • 配置示例:(当访问静态资源,则从 linux 服务器 /opt/static 目录下获取(举例))

    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid
    |doc|ppt|pdf|xls|mp3|wma)$ {
    	root /opt/static;
    }
    
    注意:在 /opt/static 下添加项目时,记得带项目名
    
  • 正则说明:

    ~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
    第一个点 . 表示任意字符
    *表示一个或多个字符
    \. 是转移字符,是后面这个点的转移字符
    | 表示或者
    $ 表示结尾
    
  • 配置说明:

    整个配置表示以 .后面括号里面的这些后缀结尾的文件都由 nginx 处理

    放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;

    否则会出现403错误 chmod 755

方式二(推荐)

方式二:在 nginx.conf 的 location 中配置静态资源所在目录实现(推荐)

  • 配置示例:(当访问静态资源,则从 linux 服务器 /opt/static 目录下获取(举例))

    location ~ .*/(css|js|img|images|image) {
    	root   /opt/static;
    }
    
    xxx/css
    xxx/js
    xxx/img
    xxx/images
    	我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源
    

动静分离(常用)

  • Nginx 的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。

    动态资源,如 jsp 由 tomcat 或其他 web 服务器完成。

    静态资源,如图片、css、js 等由 nginx 服务器完成。

    它们各司其职,专注于做自己擅长的事情。

  • 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构。

  • 示例:整个架构中,一个 nginx 负责负载均衡,两个 nginx 负责静态代理。Nginx 在一台 Linux 上安装一份,可以启动多个 Nginx,每个Nginx 的配置文件不一样即可。

  • 示例参考:https://www.bilibili.com/video/BV11V411C7r9?p=19

image-20220411100116010

虚拟主机

  • 虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。

  • Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。

  • Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个server节点即可;

    例如:www.meituan.com 切换城市,可以看到不同的城市地址不一样(二级域名)

    比如一个公司有多个二级域名,没有必要为每个二级域名都提供一台 Nginx 服务器,就可以使用虚拟主机技术,在一台 nginx服务器上,模拟多个虚拟服务器。

配置虚拟主机方式

基于端口的虚拟主机(了解)

  • 基于端口的虚拟主机配置,使用端口来区分

  • 浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问;

  • 注意:一般不使用这种方式!

    因为我们访问服务的时候一般是不会加端口号的!

  • 配置示例:

    server {
        listen 8080;
        server_name www.myweb.com;
        location /myweb {
    	    proxy_pass http://www.myweb.com;
        }
    }
    
    server {
    	listen 9090;
    	server_name www.myweb.com;
    	location /p2p {
    		proxy_pass http://www.p2p.com;
        }
    }
    

基于域名的虚拟主机(常用)

  • 基于域名的虚拟主机配置,使用域名来区分。

  • 一个 nginx 同时绑定多个不同的域名!

  • 基于域名的虚拟主机是最常见的一种虚拟主机!

  • 参考链接:https://www.bilibili.com/video/BV11V411C7r9?p=22

  • 配置示例:

    upstream www.myweb.com{
    	server 192.168.208.128:8081;
    }
    server {
    	listen       80;
    	server_name  www.myweb.com;
        location /myweb {
    	    proxy_pass http://www.myweb.com;
        }
    }
    
    upstream www.p2p.com{
    	server 192.168.208.128:8082;
    }
    server {
    	listen       80;
    	server_name  www.p2p.com;
    	location /myweb {
    		proxy_pass http://www.p2p.com;
    }
    
  • 需要使用下本地 dns 映射(将域名映射为IP地址),进行如下绑定配置:

    需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
    	在hosts文件配置:
    192.168.208.128 www.myweb.com
    192.168.208.128 www.p2p.com
    	前面是Linux的IP,后面是你自定义的域名
    
posted @ 2022-11-01 23:33  luis林  阅读(171)  评论(0编辑  收藏  举报