【实用篇】Nginx的配置文件以及案例详细配置实现

一、nginx 的配置文件

nginx 的配置文件 nginx.conf 文件可以分为以下三部分

  • 全局快

    • 从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数, 进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。全局快比如上图中的 worker_processes 1 是 Nginx 服务器并发处理服务的关键配置, worker_processes 值越大,可以支持的并发处理量越多,但是会受到硬件、软件设备的制约。
  • event 块

    • event 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对 work process 下的网络进行序列化,是否允许同时接收多个网络,选取哪种驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。
      event 块如上图中:worker_connections 1024:表示每个 work process 的最大连接数为 1024。
  • http块

    • 这一部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
      http块又分为 http全局块 和 server 块。
      • http全局块
        • http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
      • server块
        • 这块和虚拟主机有密切联系,虚拟主机从用户角度看,和一台独立的硬件主机是一样。而 http块可以有多个 server块,每一个 server块就相当于一个虚拟主机。每一个 server块 又可以分为 全局server块 以及多个 location块。

        • 全局 server 块
          最常见的配置就是本虚拟机主机的监听配置和本虚拟机的名称或 IP 配置。

        • location 块
          这块的主要作用就是基于 Nginx 服务器接收到的请求字符串(例如:server_name/uri-string),对虚拟机主机名称(也可以是IP别名)之外的字符串(如前面的:/uri-string)进行匹配。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里执行。
          http 块

二、配置实例-反向代理

反向代理实例 1

1、实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080(linux虚拟机中的 tommcat 主页)

2、配置实例准备:安装 JDK 1.8、Tommcat
(1)JDK 的安装可以参考JDK 1.8 的安装方法
(2)安装 Tommcat

  • 下载 Tommcat 的压缩包
    下载地址Tommcat 压缩包下载地址参考
    tommcat 压缩包下载

  • 通过 Xftp 将该压缩包上传到 linux 系统下的 /usr/src/ 目录
    上传压缩包

  • 在 /usr/src/ 目录下将压缩包解压

    cd /usr/src
    
    tar -vxf apache-tomcat-7.0.70.tar.gz
    
  • 启动 Tommcat

    # 切换到 Tommcat 目录下的 bin 目录
    cd apache-tomcat-7.0.70/bin
    
    # 执行启动命令
    ./startup.sh
    

    启动 tommcat

  • 开放8080端口(如果已经开放则不需要再次开放)

    # 打开配置文件
    vim /etc/sysconfig/iptables
    
    # 在配置文件中添加一下内容
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
    
    # 按 esc 退出编辑模式,输入以下命令保存即可 
    :wq 
    
    # 重启防火墙服务
    service iptables restart
    

    开放8080端口

  • 通过访问 ip + 8080端口号验证 tommcat 是否已经成功启动,看到如下页面即 tommcat 成功启动。
    tommcat 主页

  • 实现原理
    反向代理实例的实现原理

(3)反向代理实例的配置

  • 在本机 host 文件中配置 ip 地址所对应的域名

    • host 文件在 C:\Windows\System32\drivers\etc 目录下
      host文件目录

    • 使用编辑工具打开该 host 文件,并在该文件中加入以下内容
      配置 ip地址与域名

  • 修改 nginx 的配置文件。( /usr/lcoal/nginx/conf/ 目录下的 nginx.conf 文件)
    修改配置文件

    修改完后,按 ESC 退出编辑模式,再输入 :wq 保存退出。

  • 在本地浏览器中地址栏输入 www.123.com 测试 nginx 反向代理是否成功,如果成功访问到 tomcat 的主页,说明配置成功。
    测试反向代理实例1

反向代理实例 2

1、实现效果:使用nginx 反向代理, 根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001。

访问 http://192.168.134.105:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http://192.168.134.105:9001/vod/ 直接跳转到 127.0.0.1:8081

2、配置实例准备:
(1)准备两个 tomcat,一个端口 8080 端口,一个 8081 端口,配置各自的页面以及端口号。

  • 创建 tomcat8080 和 tomcat8081 文件夹

    # 切换到 /usr/src/ 目录下
    cd /usr/src
    
    # 创建两个空文件夹
    mkdir tomcat8080
    mkdir tomcat8081
    

    创建两个空文件夹

  • 和配置反向代理实例 1 一样,将 tomcat 的压缩包分别上传到新创建的文件夹 tomcat8081 和 tomcat8082,并解压

    # 将 tomcat8080 中的压缩包解压
    cd tomcat8080/
    tar -xvf apache-tomcat-7.0.70.tar.gz
    
    # 将 tomcat8081 中的压缩包解压
    cd tomcat8081/
    tar -xvf apache-tomcat-7.0.70.tar.gz
    
  • 修改 tomcat8081 中的配置文件的端口

    cd /usr/src/tomcat8081/apache-tomcat-7.0.70/conf
    vim server.xml
    

    tomcat8081文件夹下的tomcat配置文件

  • 两个 tomcat 都配置各自的页面,以便区分
    8080端口的页面
    8081端口的页面
    然后使用 Xftp 分别上传到各自的文件夹中
    上传8080端口的页面文件
    上传8081端口的页面文件

  • 开放 8080 端口和 8081 端口启动 两个 tomcat (开放端口,可参考反向代理配置实例 1或者以下开放 9001 端口),测试。
    访问 8080 端口 tomcat
    访问 8081 端口 tomcat
    若访问页面如上,则说明两个 tomcat 配置成功。

(2)修改 nginx 的配置文件

  • 在http 块中添加 server 块 加入如下内容

    server {
        listen       9001;
        server_name  192.168.134.105;
    
    
        location ~/edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
    
    
        location ~/vod/ {
            proxy_pass http://127.0.0.1:8081;
        }
    }
    

    配置 nginx 配置文件

  • 开放 9001 端口

    # 打开配置文件
    vim /etc/sysconfig/iptables
    
    # 在配置文件中添加一下内容
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT
    
    # 按 esc 退出编辑模式,输入以下命令保存即可 
    :wq 
    
    # 重启防火墙服务
    service iptables restart
    

    开放 9001 端口

  • 测试 nginx 反向代理是否成功

    注意!!!:在测试之前,需要切换到 /usr/local/nginx/sbin 目录下,通过指令 ./nginx -s reload 重启 nginx 服务。

    在浏览器地址栏中,分别输入:
    http://192.168.134.105:9001/edu/a.html tomcat8080端口的nginx反向代理的结果

    http://192.168.134.105:9001/vod/a.html tomcat8081端口的nginx反向代理的结果
    出现以上结果说明 nginx 反向代理成功。

补充:关于 location 指令的说明

该指令用于匹配 URL 地址。语法如下:

location [ = | ~ | ~* | ^~ ] uri {


}

1、= :用于不含正则表达式的 uri 前, 要求请求字符串与 uri 严格匹配,如果匹配 成功, 就停止继续向下搜索并立即处理该请求。
2、~: 用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式, 并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前, 要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求, 而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

三、配置实例-负载均衡

1、实现的效果:在浏览器地址栏中输入 http://192.168.134.105/edu/a.html,体现负载均衡效果,将请求平均分配到 8080 和 8081 端口中。
2、配置前准备:
(1)准备两个 tomcat 服务器,一台 8080 端口,一台 8081 端口,可参考反向代理实例2。
(2)在两台 tomcat 服务器的 webapps 目录中,创建名称为 edu 的文件夹,在 edu 文件夹中创建页面 a.html 用于测试。(可以类比反向代理实例2)
8081端口的 edu 目录

3、配置 nginx 实现负载均衡
在 http 块中编辑 server 块并添加 upstream 部分,具体代码如下:

    upstream myserver{
        server 192.168.134.105:8080;
        server 192.168.134.105:8081;
    }


    server {
        listen       80;
        server_name  192.168.134.105;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
          root   html;
          index  index.html index.htm;
          proxy_pass http://myserver;
        }
	}

配置 nginx 实现负载均衡
配置好后,按 ESC 退出编辑模式,输入 :wq 保存退出。

4、重启 nginx 服务,测试负载均衡效果。

cd /usr/local/nginx/sbin/

./nginx -s reload

地址栏输入: http://192.168.134.105/edu/a.html
nginx 负载均衡效果

刷新页面
nginx 负载均衡效果
多次刷新页面可发现,两个页面交替出现,说明请求平均分配给 8080 端口的 tomcat 服务器和 8081 端口的 tomcat 服务器,负载均衡配置成功。

补充:nginx 分配服务器策略

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果服务器 down 掉,就会自动剔除该服务器。(这个是 nginx 默认的服务器分配策略,不用做额外的配置)

2、weight 权重

weight 代表权重,默认值是 1,权重越高被分配的客户端请求越多。
作用:指定轮询的几率,weight 和访问比率成正比,用于服务端性能不均的情况。
具体配置如下示例:

    upstream myserver{
        server 192.168.134.105:8080 weight=8;
        server 192.168.134.105:8081 weight=10;
    }

3、ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个客户端访问固定的一个后端服务器。
通俗的来说,就是每个请求第一次访问哪个服务器,后面同样 ip 地址的请求还是访问同一个服务器。比如说 http://192.168.134.105/edu/a.html 请求访问的服务器是 8080 端口的 tomcat 服务器,那么 ip 地址同样为 http://192.168.134.105 的其他请求还是访问 8080端口的 tomcat 服务器。

同时,该策略可以解决 Session 共享问题。

具体配置如下:

    upstream myserver{
    	ip_hash;
        server 192.168.134.105:8080;
        server 192.168.134.105:8081;
    }

4、fair(第三方)

按服务器的响应时间来分配请求,响应时间短的优先分配。
具体配置如下:

    upstream myserver{
        server 192.168.134.105:8080;
        server 192.168.134.105:8081;
        fair;
    }

四、配置实例-动静分离

1、什么是动静分离(详解)
Nginx 动静分离简单来说就是把动态跟静态请求分开, 不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开, 可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。

动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名, 放在独立的服务器上, 也是目前主流推崇的方案; 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。

通过 expires 参数设置, 可以使 浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资 源设定一个过期时间, 也就是说无需去服务端验证, 直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存), 我这里设置 3d, 表示在这 3 天之内访问这个 URL, 发送 一个请求, 比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304, 如果有修改, 则直接从服务器重新下载, 返回状态码 200。

2、配置前的准备:准备好静态资源
在根目录下新建一个 source 文件夹,并在 source 文件夹下创建 image 文件夹(用来存放图片)和 www 文件夹(用来存放 html 页面)。
动静分离测试准备资源
3、nginx 配置文件配置动静分离

server {
        listen       80;
        server_name  192.168.134.105;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /www/ {
          root   /source/;
          index  index.html index.htm;
        }

        location /image/ {
          root  /source/;
          autoindex     on;
        }
}

配置动静分离
4、切换到 /usr/local/nginx/sbin/ 目录,重启 nginx 服务,测试动静分离是否配置成功。

cd /usr/local/nginx/sbin/

./nginx -s reload
  • 在浏览器输入地址 http://192.168.134.105/image/ 可以看到目录下文件的展示。
    测试动静分离
    点击图片连接,可见图片的具体内容。

  • 在浏览器地址栏中输入 http://192.168.134.105/www/a.html,见以下内容则说明配置成功。
    测试 html 页面

五、配置 Nginx 高可用

1、什么是高可用
通俗的来说,就是保证当一个 Nginx 服务器宕机时,有另外一个 Nginx 服务器代替它,来保证能完成相关的功能。

2、需要实现的效果:
Nginx 高可用集群示例

如上图:要实现 Nginx 高可用需要配置一个主机和一个或多个从机(备用机),各自有各自的 ip 地址,Nginx 服务集群以相同的 ip 地址对外暴露。当主机 nginx 1宕机时,从机 nginx 2 可以代替主机,实现反向代理、负载均衡等效果。

3、配置高可用的准备工作:
(1)需要两台服务器(linux 虚拟机,我的是 192.168.134.105 和 192.168.134.128)
(2)在两个虚拟机上安装 nginx,可参考 如何在Linux虚拟机中安装 Nginx
(3)在两个虚拟机上安装 keepalived 软件,执行 如下yum 命令即可:

	yum install keepalived -y

4 、具体配置高可用(主从配置)

  • (1)配置 keepalived
    安装完之后,在 /etc/ 目录下会生成目录 keepalived,有文件 keepalived.conf,编辑此文件。
    下面以主机 nginx 为例来配置(备机可参考修改):
    global_defs {
    	notification_email {
    		acassen@firewall.loc
    		failover@firewall.loc
    		sysadmin@firewall.loc
    	}
    	notification_email_from Alexandre.Cassen@firewall.loc
    	smtp_server 192.168.134.105   # nginx 服务器的 ip 地址
    	smtp_connect_timeout 30
    	router_id LVS_DEVEL
    }
    
    vrrp_script chk_http_port {
    
    	script "/usr/local/src/nginx_check.sh"
    
    	interval 2      #(检测脚本执行的间隔)
    
    	weight 2
    }
    
    vrrp_instance VI_1 {
    	state MASTER   # 备份服务器上将 MASTER 改为 BACKUP
    	interface eth0  # 网卡
    	virtual_router_id 51   # 主、备机的 virtual_router_id 必须相同
    	priority 100     # 主、备机取不同的优先级,主机值较大,备份机值较小
    	advert_int 1
    	authentication {
    		auth_type PASS
    		auth_pass 8888
    	}
    	virtual_ipaddress {
    		192.168.134.10  # VRRP H 虚拟地址
    	}
    }
    
    配置 keepalived

keepalived 配置文件目录

  • (2)在 /usr/local/src/ 目录下,创建脚本文件 nginx_check.sh,并添加以下内容(以主机为例,备机同理):
    #!/bin/bash
    
    # 如果进程中没有nginx则将keepalived进程kill掉
    
    A=`ps -C nginx--no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A
    
    if [ $A -eq 0];then                    ## 如果没有进程值得为零
    	/usr/local/nginx/sbin/nginx
    	sleep 2
    	if [ $A -eq 0 ];then
    		service keepalived stop          ## 则结束 keepalived 进程
    	fi       
    fi
    
    配置主机的 nginx 检测脚本
  • (3)启动两台服务器的 nginx 和 keepalived
    # 切换到 nginx 的 sbin 目录
    cd /usr/local/nginx/sbin/
    
    # 启动 nginx
    ./nginx 
    
    # 如果已经启动,则使用以下命令重启
    ./nginx -s reload
    
    # CentOS 6.5 启动服务的命令
    service  keepalived start
    
    # CentOS 7 启动 keepalived 服务命令
    systemctl start keepalived.service
    
    启动 nginx 和 keepalived

5、测试 nginx 高可用
(1)在浏览器输入前面所配置的 虚拟 ip 地址 http://192.168.134.10测试是否可以访问,如果可以访问说明主服务器是可以通过虚拟 ip 进行访问的。
通过虚拟ip地址访问nginx

(2)手动将 nginx 主服务器停掉模拟主服务器宕机,再次刷新页面,测试 nginx 集群的高可用(即所有请求是否会转发到备份服务器中)。

# 切换到 nginx 的 sbin 目录
/usr/local/nginx/sbin

# 关闭 nginx 服务
./nginx -s stop

关闭主服务器的nginx应用

测试 nginx 集群高可用
刷新页面还是可以访问到 nginx 欢迎页,说明说明 nginx 集群高可用到此配置成功!

  • 17
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
一个完整的Nginx配置文件通常由全局块、events块和http块组成。下面是对每个部分的详细描述: 1. 全局块: - user: 指定Nginx进程使用的用户。 - worker_processes: 指定Nginx启动的工作进程数,一般设置为CPU核心数。 - error_log: 指定错误日志文件的路径。 - pid: 指定Nginx主进程的PID文件路径。 2. events 块: - worker_connections: 指定每个工作进程能同时处理的最大连接数。 3. http 块: - include: 引入其他配置文件,如mime.types等。 - default_type: 设置默认的Content-Type。 - access_log: 指定访问日志文件的路径。 - server 块:定义一个虚拟主机或服务。 在 server 块中,可以配置以下内容: - listen: 指定监听的端口号和地址。 - server_name: 指定服务器的域名或IP地址。 - location 块:定义URL路径和对应的处理规则。 在 location 块中,可以配置以下内容: - proxy_pass: 将请求转发到其他服务器或应用程序。 - proxy_set_header: 设置代理请求的头部信息。 除了上述常见的配置项外,Nginx还支持其他许多指令和模块,如SSL/TLS配置、负载均衡、缓存设置等。可以根据自己的需求进行相应的配置配置文件的路径可能因操作系统和安装方式而有所不同,一般位于 `/etc/nginx/nginx.conf` 或 `/usr/local/nginx/conf/nginx.conf`。 在修改完配置文件后,需要使用 `nginx -s reload` 命令重新加载配置文件,以使更改生效。同时,可以使用 `nginx -t` 命令检查配置文件的语法是否正确。 请注意,修改Nginx配置文件前最好备份原始配置,并谨慎地进行修改,以避免导致服务不可用或安全漏洞。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值