Nginx基础配置及场景应用

发布时间:2023年12月19日

简介

Nginx是一个高性能的HTTP和反向代理服务器。
Nginx官网:http://nginx.org/en/docs/
反向代理的概念
举例说明
打工人张三没时间找房,房东王五社恐不愿与陌生人打交道,于是乎,房屋中介应运而生。
张三委托房屋中介李四为自己寻找住房,房东王五授权房屋中介李四带看,两者的问题迎刃而解。
这里的房屋中介就是一种代理
在代理中,分为3个角色,客户端、代理服务器和服务端。并且针对被代理的角色不同,又分为正向代理和反向代理。
正向代理:被代理的对象是客户端。张三发起看房需求,属于客户端。
反向代理:被代理的对象是服务端。王五提供住房资源,属于服务端。

正向代理使用场景:

  • 通过正向代理服务器,隐藏客户端信息,匿名访问。
  • 通过正向代理服务器,访问无法直接访问的资源。

反向代理使用场景:

  • 通过反向代理服务器,解决跨域问题。
  • 通过反向代理服务器,统一访问入口。
  • 通过反向代理服务器,避免暴露真实服务端信息,提高安全性。
  • 通过反向代理服务器,实现负载均衡

Nginx单实例安装(以centos服务器为例)

1、安装依赖
    yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、nginx下载
    wget http://nginx.org/download/nginx-1.18.0.tar.gz
3、Nginx解压
    tar -zxvf nginx-1.18.0.tar.gz
4、Nginx安装
    cd nginx-1.18.0
    ./configure
    make && make install
5、注意:安装完成后的路径为:/usr/local/nginx
6、Nginx命令
 - 普通启动服务:/usr/local/nginx/sbin/nginx
 - 配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 - 暴力停止服务:/usr/local/nginx/sbin/nginx -s stop
 - 优雅停止服务:/usr/local/nginx/sbin/nginx -s quit
 - 检查配置文件:/usr/local/nginx/sbin/nginx -t
 - 重新加载配置:/usr/local/nginx/sbin/nginx -s reload
 - 查看相关进程:ps -ef | grep nginx

7、开放防火墙
    [root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    [root@caochenlei ~]# /etc/rc.d/init.d/iptables save
    iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]

Nginx使用场景

场景一: 反向代理端口请求转发

**实现效果:**打开浏览器,在浏览器地址栏输入地址:http://www.123.com,跳转到Liunx系统Tomcat主页面中。
实现思路
在这里插入图片描述

实现步骤
1、修改Windows中的hosts域名映射
复制“C:\Windows\System32\drivers\etc\hosts”到桌面,右键记事本打开,在里边加上以下代码保存,然后再复制回去,不要直接修改,会不让保存!

#虚拟机域名      映射的域名地址
192.168.206.128  www.123.com

2、修改Nginx中的配置文件并启动

[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf

server {
    listen 80;
    server_name 192.168.206.128;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / {
        proxy_pass http:127.0.0.1:8080;
        root html;
        index index.html index.htm;
    }
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx

3、下载Tomcat、解压Tomcat、安装Tomcat、启动Tomcat

解压:
[root@caochenlei ~]# tar -zxvf apache-tomcat-7.0.105.tar.gz
安装:
[root@caochenlei ~]# mv apache-tomcat-7.0.105 /usr/local/tomcat
启动:
[root@caochenlei ~]# /usr/local/tomcat/bin/startup.sh
添加到防火墙:
[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save
如果关闭请用:
[root@caochenlei ~]# /usr/local/tomcat/bin/shutdown.sh
3.2.4、关闭服务
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx -s quit
[root@caochenlei ~]# /usr/local/tomcat/bin/shutdown.sh

场景二: 使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中。

实现效果: 打开浏览器,在浏览器地址栏输入地址:http://192.168.206.128/edu/a.html,跳转到8080端口;输入http://192.168.206.128/edu/a.html,跳转到8080端口;
实现思路
修改nginx配置根据路由前缀进行相应端口转发
在这里插入图片描述

实现步骤
1、修改Nginx的配置文件,然后启动

    [root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf
    分支server {
            listen 80;
            server_name 192.168.206.128;
            #charset koi8-r;
            #access_log logs/host.access.log main;
            location ~ /edu/ {
                proxy_pass http://127.0.0.1:8080;
            }
            location ~ /vod/ {
                proxy_pass http://127.0.0.1:8081;
            }
    [root@caochenlei ~]# /usr/local/nginx/sbin/nginx
2、在Tomcat2的webapps文件夹中,创建一个edu文件夹,在里边创建a.html,并启动
    [root@caochenlei ~]# mkdir -p /usr/local/tomcat2/webapps/edu
    [root@caochenlei ~]# echo "<h1>This is 8081 Port</h1>" > /usr/local/tomcat2/webapps/edu/a.html
    [root@caochenlei ~]# /usr/local/tomcat1/bin/startup.sh
    [root@caochenlei ~]# /usr/local/tomcat2/bin/startup.sh

场景三:nginx实现动静分离

目的: 将动态请求和静态请求分开。Nginx处理静态页面;tomcat处理动态页面;两种方式,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,另外一种是动态和静态文件混合发布,通过Nginx进行区分
实现效果
当请求进来,区分是静态请求还是动态请求,如果是静态请求就发到静态文件中去,动态的就还是默认取tomcat下的webapps
实现思路
在这里插入图片描述

实现步骤
1、创建静态资源文件,为了对比,Tomcat中也放一个

[root@caochenlei ~]# mkdir -p /data/www/
[root@caochenlei ~]# mkdir -p /usr/local/tomcat/webapps/ROOT/www
[root@caochenlei ~]# echo "\<h1>/data/www/a.html</h1>" > /data/www/a.html
[root@caochenlei ~]# echo "\<h1>/usr/local/tomcat/webapps/ROOT/www/a.html\</h1>" > /usr/local/tomcat/webapps/ROOT/www/a.html

2、修改Nginx的配置文件

[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.confserver {
        listen 80;
        server_name 192.168.206.128;
        #charset koi8-r;
        #access_log logs/host.access.log main;
        location /www/ {
            root /data/;
            index index.html index.htm;
        }
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx

3、启动tomcat

[root@caochenlei ~]# /usr/local/tomcat/bin/startup.sh

4、页面访问:192.168.206.128,请求去到了静态文件

场景四 Nginx高可用集群

采用的是一主一备的模式,当主节点Nginx挂掉,备份服务器Nginx立刻跟上,这样就保证了服务的高可用性
实现效果
当主节点Nginx挂掉以后,服务依然可以正常使用
实现思路
引入keepalived组件来实现,具体实现见下图
在这里插入图片描述

实现步骤
1、主节点上的Nginx的配置文件

[root@caochenlei ~]# vi /usr/local/nginx/conf/nginx.conf
upstream myserver {
        server 192.168.206.128:8080;
        server 192.168.206.128:8081;
    }
    server {
        listen 80;
        server_name 192.168.206.128;
        #charset koi8-r;
        #access_log logs/host.access.log main;
        location / {
            proxy_pass http://myserver;
        }
[root@caochenlei ~]# /usr/local/nginx/sbin/nginx

2、启动主节点上的两台Tomcat

[root@caochenlei ~]# /usr/local/tomcat1/bin/startup.sh
[root@caochenlei ~]# /usr/local/tomcat2/bin/startup.sh

3、安装主节点上的keepalived

安装keepalived:
[root@caochenlei ~]# yum install -y keepalived
删除keepalived的配置文件:
[root@caochenlei ~]# rm -f /etc/keepalived/keepalived.conf
新增keepalived的配置文件:
[root@caochenlei ~]# vi /etc/keepalived/keepalived.conf
注意:一定要注意router_id、state、interface的值,我就在这里踩坑了。
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #邮件服务器通知地址(暂不配置,默认即可)
   smtp_server 192.168.200.1
   #邮件服务器超时时间(暂不配置,默认即可)
   smtp_connect_timeout 30
   #当前虚拟机的IP地址,即本机ip
   router_id 192.168.206.128
}
vrrp_script Monitor_Nginx {
 script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径
 interval 2                                 #检测脚本执行的间隔
 weight 2                                   #检测脚本执行的权重
}
vrrp_instance VI_1 {
    state MASTER         #标识这个机器是MASTER还是BACKUP
    interface eth0       #当前机器的网卡名称  
    virtual_router_id 51 #虚拟路由的编号,主备必须一致
    priority 100         #主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1         #(VRRP Multicast广播周期秒数)
    authentication {
        auth_type PASS   #(VRRP认证方式)
        auth_pass 1111   #(密码)
    }
    track_script {
  Monitor_Nginx #(调用Nginx进程检测脚本)
 }
    virtual_ipaddress {
        192.168.206.50  #虚拟IP地址,与从节点组成的虚拟组网
    }
}
新增keepalived的检测脚本:
[root@caochenlei ~]# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process" | grep -v grep )" == "" ]
 then
 killall keepalived
fi
启动keepalived服务:
[root@caochenlei ~]# service keepalived start

4、准备一台全新的虚拟机,安装Nginx和keepalived
nginx配置同上
主要是修改keepalived的配置

新增keepalived的配置文件:
[root@caochenlei ~]# vi /etc/keepalived/keepalived.conf
注意:一定要注意router_id、state、interface的值,我就在这里踩坑了。
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #邮件服务器通知地址(暂不配置,默认即可)
   smtp_server 192.168.200.1
   #邮件服务器超时时间(暂不配置,默认即可)
   smtp_connect_timeout 30
   #当前虚拟机的IP地址,本机ip
   router_id 192.168.206.129
}

vrrp_script Monitor_Nginx {
 script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径
 interval 2                                 #检测脚本执行的间隔
 weight 2                                   #检测脚本执行的权重
}

vrrp_instance VI_1 {
    state BACKUP         #标识这个机器是MASTER还是BACKUP
    interface eth1       #当前机器的网卡名称  
    virtual_router_id 51 #虚拟路由的编号,主备必须一致
    priority 10          #主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1         #(VRRP Multicast广播周期秒数)
    authentication {
        auth_type PASS   #(VRRP认证方式)
        auth_pass 1111   #(密码)
    }
    track_script {
  Monitor_Nginx    #(调用Nginx进程检测脚本)
 }
    virtual_ipaddress {
        192.168.206.50   ##虚拟IP地址,与主节点相同组成的虚拟组网
    }
}

新增keepalived的检测脚本:
[root@caochenlei ~]# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process" | grep -v grep )" == "" ]
 then
 killall keepalived
fi
启动keepalived服务:
[root@caochenlei ~]# service keepalived start

5、检测各入口访问正常

  • 检测主服务器节点,打开浏览器输入:http://192.168.206.128/edu/a.html正确负载均衡到8080和8081端口
  • 检测从服务器节点,打开浏览器输入:http://192.168.206.129/edu/a.html正确负载均衡到8080和8081端口
  • 检测虚拟组网ip,打开浏览器输入:http://192.168.206.50/edu/a.html,测试虚拟IP能不能实现负载均衡。
  • 检测均正常后,测试在主节点挂掉的情况下,从节点能否正常接替工作,杀死主节点nginx,打开浏览器访问http://192.168.206.50/edu/a.html,查看是否正常

Nginx配置详解

配置演示图

在这里插入图片描述

全局块

主要是影响nginx全局的指令

events块

配置影响Nginx服务器或与用户的网络连接。主要包括:

  • 事件驱动模型的选择

  • 最大连接数的配置

    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
    #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;

server块,常用要参与改动的块

  • 配置网络监听
  • 配置https服务
  • 基于名称的虚拟主机配置
  • 基于IP的虚拟主机配置

虚拟主机的常见配置

server {
    listen 80; #配置监听端口
    server_name localhost; #配置服务名
    charset utf-8; #配置字符集
    access_log logs/host.access.log main; #配置本虚拟主机的访问日志
    location / {
        root html; #root是配置服务器的默认网站根目录位置,默认为Nginx安装主目录下的html目录
        index index.html index.htm; #配置首页文件的名称
    }
    error_page 404 /404.html; #配置404错误页面
    error_page 500 502 503 504 /50x.html; #配置50x错误页面
}
#配置https服务,安全的网络传输协议,加密传输,端口443
    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;
        }
    }

location块

配置请求的路由,以及各种页面的处理情况

 location / {
        root html; ##root是配置服务器的默认网站根目录位置,默认为Nginx安装主目录下的html目录
        index index.html index.htm;#配置首页文件的名称
    }

参考:
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247516769&idx=3&sn=2c9b6a79c8bd1476d99057caedb1875d&chksm=fbb10b9fccc682899bc443838d327796d909e217a21ba36d5853a31078e6bf81ccc47fc9bf89&scene=27
https://zhuanlan.zhihu.com/p/43971218

文章来源:https://blog.csdn.net/qq_42207682/article/details/135089171
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。