nginx使用以及配置

article/2025/8/17 6:07:28

nginx主要使用的地方就是用来进行反向代理的http服务器,

主流的Web服务器有:

1、Apache,开源免费,具有简单、高速、性能稳定等特点,可作代理服务器使用;

2、Nginx,是一种高性能的HTTP和反向代理web服务器,支持高并发和负载均衡;

3、IIS,适用于windows系统,可用于监视配置和控制Internet服务;

4、Tomcat,是一个开放源代码,运行servlet和JSP Web应用软件并基于Java的Web应用软件容器,性能稳定,且免费。

笔者日常主要开发用到的是nginx和tomcat, 静态资源使用niginx处理, 动态资源交由tomcat处理.

tomcat的默认的连接数是100个,而nginx最大的连接数是50000个并发的连接数.

  1. nginx的优势:
    • 高并发
      
    • 热部署
      
    • 反向代理,负载均衡,
      
    • 处理静态资源
      
  2. nginx的安装

linux环境,执行一下指令即可

   yum install gcc-c++yum install -y pcre pcre-develyum install -y openssl openssl-devel

前置环境准备好了之后就可以开始正式的安装了, 将 nginx 压缩包拷贝至 linux 服务器,解压 nginx 压缩包。

第一步:解压并进入 nginx 安装目录

tar -zxvf nginx-1.12.2.tar.gz -C /opt/install

cd nginx-1.12.2 .

第二步:生成 makefile 文件

./configure --help 查询详细参数(参考本教程附录部分:nginx 编译参数)

参数设置如下:提示先创建该目录:mkdir -p /var/temp/nginx

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi

第三步:编译并安装

make  install

第四步:复制 nginx 命令为全局命令

将 nginx 命令复制为全局命令之后,就可以在任意地方使用了。

cp /usr/local/nginx/sbin/nginx /usr/local/bin/

第五步:启动 nginx,并测试

cd /usr/local/nginx/sbin/

./nginx

 看到此页面即表示安装成功

若是涉及防火墙的安装可以通过一下指令进行查看

查看开放的端口号

firewall-cmd --list-all

设置开放的端口号

firewall-cmd --add-port=80/tcp --permanent

重启防火墙

firewall-cmd –reload .

nginx配置

我们所谓的nginx的配置其实都是指的是对nginx.conf文件的修改 nginx的文件的修改实际上就是这个配置文件,此文件分为三个部分:

第一部分:全局块

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

第二部分:events 块

比如上面的配置:

events {

worker_connections 1024;

} .

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

上述例子就表示每个 worker_process 支持的最大连接数为 1024.这部分的配置对 Nginx 的性能影响较大,在 实际中应该灵活配置。

第三部分:http 块

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这 里。需要注意的是:http 块也可以包括 http 全局块、server 块。

1、全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

2、location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称

(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、

数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

 

 

...                 #全局块event{              #events块...
}http{               #http块server{         #server块...         #server全局块location{   #location块...}location{   #location块...}}server{         #server块...}...             #http全局块
}

上面就是关于nginx.conf文件的主要功能拨快的配置信息

下面讲一下如果使用:

#### 全局块 开始 ####
user nobody nobody;                 #配置允许运行nginx服务器的用户和用户组
worker_processes 3;                 #配置允许nginx进程生产的worker process数
error_log logs/error.log;           #配置nginx服务器运行对错误日志存放路径
pid nginx.pid;                      #配置nginx服务器运行时的pid文件存放路径和名称
#### 全局块 结束 ######## events块 开始 ####
events
{ues epoll;                      #配置事件驱动模型worker_connections 1024;        #配置最大连接数
}
#### events块 结束 ######## http块 开始 ####
http
{include mime.types;             #定义MIME-Typedefault_type application/octet-stream;   sendfile on;                   #配置允许使用sendfile方式传输keepalive_timeout 65;           #配置连接超时时间log_format access.log '$remote_addr-[$time_local]-"$request"-"$http_user_agent"';     #配置请求处理日志的格式#### server块 开始 ######配置虚拟主机 myServerlserver{listen  8081;              #配置监听端口和主机名称server_name myServer1;access_log  /myweb/server1/logaccess.log;#配置请求处理日志存放路径error_page 404  /404.html;     #配置错误页面location  /server1/location1 { #配置处理/server1/location1 请求的locationroot  /myweb;index index.svr1-loc1.htm;}location  /server1/location2 { #配置处理/server1/location2 请求的locationroot  /myweb;index index.svr1-loc2.htm;}}server{listen  8082;server_name  192.168.1.3;access_log  /myweb/server2/log/access.log;error_log  404  /404.html;    #对错误页面404.html 做了定向配置location  /server2/location1 {root  /myweb;index index.svr2-loc1.htm;}location  /svr2/loc2 {alias  /myweb/server2/location2;       #对location的URL进行更改index index.svr2-loc1.htm;}location = /404.html                  #配置错误页面转向{root  /myweb/;index 404.html;}}#### server块 结束 ####
}
### http块 结束 ####

看到上面是不是还是稀里糊涂的, 哈哈哈 , 下面我通过几个配置nginx的案例跟大家讲一下具体的使用:

1:配置反向代理的实现

实现的效果是这样的: 服务端使用 nginx 反向代理,客户端访问 www.123.com ,nginx 将请求转发到服 务端的某个 tomcat 服务器上。

第一步:启动一个 tomcat ,浏览器地址栏输入 127.0.0.1:8080 ,出现如下界面

第二步:通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1 

这个host文件是具体的位置在C:\Windows\System32\drivers\etc 路径下, 这个路径有个hosts文件

在文件的最下面加上     ip    www.123.com.( 如192.168.92.128 www.123.com)

第三步:在 nginx.conf 配置文件中增加如下配置
如上配置:我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故
访问该域名时会跳转到 127.0.0.1:8080 路径上。重新加载 nginx 配置文件,然后在浏览器访
问 www.123.com,结果如下:

 

 这就实现了反向代理了

下面讲讲负载均衡:

实现的效果如下:

具体配置
第一步:准备两个 Tomcat,并在每个 tomcat 下的 ROOT 目录下分别添加有区分的 a.html
第二步:在 nginx.conf 中进行配置

 

upstream myserver {
        server 192.168.92.128:8080;
        server 192.168.92.128:8081;
}
server {
        listen
        80;
        server_name www.123.com;
        #charset koi8-r;
        #access_log
        logs/host.access.log main;
location / {
        proxy_pass http://myserver;
        proxy_connect_timeout 10;
}
        error_page
        500 502 503 504 /50x.html;
        location = /50x.html {
        root
        html;
        }
}
第三步:在 windows 浏览器多次访问: http:// www.123.com /a.html 会发现区别
几种负载均衡策略
1 、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动
剔除。
2 weight
weight 代表权 , 重默认为 1, 权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:

 3ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决
session 的问题。例如:

 4fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5、其它参数 

 Nginx 动静分离

由于 nginx 擅长处理静态资源,而 tomcat 擅长处理动态资源,所以为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

 

第一步:在两个 tomcat webapps 目录下的的 a.html 中添加 img 图片引用
8080 端口号的 tomcat webapps 目录下的 ROOT 目录中的 index.jsp 中添加 :
<h1>主tomcat:8080</h1>
<img src="1.jpg"></img>
8081 端口号的 tomcat webapps 目录下的 ROOT 目录中的 index.jsp 中添加 :
<h1>主tomcat:8081</h1>
<img src="1.jpg"></img>
第二步:在 nginx 的配置文件中配置:
location / {
        proxy_pass http://myserver;
        index
        index.html index.htm;
}
        location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
        root /usr/share/nginx/html;
}
        location ~ \.(jsp|do|action)$ {
        proxy_pass http://myserver;
}
第三步:在 /usr/share/nginx/html 目录中存放的 1.jpg 图片
第四步:在浏览器访问 : http://www.123.com/

后面讲一下nginx集群搭建, 实际上生产环境都是nginx集群搭建, 防止单节点nginx宕机,导致所有请求都到达不了tomcat.

Nginx 集群有两种模式:一种是主从模式 一种是双主模式
第一种:keepalived+Nginx 高可用集群(主从模式)

前期准备 

第一步:需要两台服务器并且安装好 nginx
        这个自己装哈, 注意ip不要冲突了就行
        vi /etc/sysconfig/network-scripts/ifcfg-ens33  去掉 UUID  
        修改 ip: 介于 3-254 之间,并且不能和其它虚拟机 ip 冲突
        vi /etc/hostname  修改主机名
        vi /etc/hosts        编辑主机名和 ip 的映射
        重启
第二步:在两台 nginx 所在的虚拟机上安装 keepalived
         yum install keepalived –y      
         安装之后,在 etc 里面生成目录 keepalived ,有文件 keepalived.conf
第三步:完成高可用配置 ( 主从配置 )
(1) 修改 /etc/keepalived/keepalivec.conf 配置文件

 (2)/usr/local/src 中添加检测脚本

 

(3) 把两台服务器上 nginx 和 和 keepalived
先启动两台服务器上的 tomcat (每个服务器有两个 tomcat, 4 tomcat 都启动)
启动 nginx:
./nginx
启动 keepalived: systemctl start keepalived.service

测试
(1) 查看虚拟 ip 是否绑定成功
        

 (2)在浏览器地址栏输入虚拟 ip 地址 192.168.17.50,在浏览器可以看到 tomcat 网页,说明虚拟 ip 可用

 测试停掉一台

把主服务器 (192.168.92.128) nginx keepalived 停掉 , 再在浏览器输入虚拟 ip ,应该也可以访问
        systemctl stop keepalived # 先停掉 keepalived
                ./nginx -s stop
        #再关闭 nginx
   再次访问虚拟 ip ,发现还是可以访问的

 第二种:keepalived+Nginx 高可用集群(双主模式)

主机配置 

keepalived.conf 最后一行添加
vrrp_instance VI_2 {
        state BACKUP
        interface ens33
        virtual_router_id 52 #新主备的路由 id:52
        priority 70
# 和另一个从机中的优先级一致即可。
        advert_int 1
        authentication {
        auth_type PASS
        auth_pass 1111
}
        virtual_ipaddress {
        192.168.92.51
        #新的虚拟 ip
        }
}
备机配置
vrrp_instance VI_2 {
        state MASTER
        interface ens33
        virtual_router_id 52
        priority 90
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
                192.168.92.51
        }
}
重启主备的 keepalived: systemctl restart keepalived
执行: ip addr
主备各有一个 VIP

编辑主备服务器上的两个 tomcat(共 4 个 tomcat)  

在主服务器 tomcat 上的端口号为 8080 index.jsp 设置显示:主 tomcat8080
在主服务器 tomcat 上的端口号为 8081 index.jsp 设置显示:主 tomcat8081
特别说明:在两台服务器的 nginx 的配置文件中只访问了主服务器上的两个 tomcat ,所以这里不需要配置从 服务器上的 tomcat
测试双主模式

 


http://chatgpt.dhexx.cn/article/tos5bxfh.shtml

相关文章

Nginx介绍及基本使用

1.介绍 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx的网站有&#xff1a…

nginx的使用

目录 1.何为nginx 2.如何使用 3.关于nginx配置文件 4.nginx三大核心 4.1 反向代理 4.2 负载均衡 4.3 动静分离 4.4 高可用 4.4.1 安装keepalived 代理服务器--使用比较多的为nginx代理服务器。 1.何为nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其…

MySQL 的索引

文章目录 索引简介普通索引主键索引唯一索引全文索引外键索引复合索引复合索引生效的几种方式复合索引会失效的情况 索引的优点高性能的索引策略独立的列前缀索引和索引的选择性复合索引选择合适的索引列顺序聚簇索引索引的 Btree 结构聚簇索引和非聚簇索引的区别聚簇索引的优点…

[MySQL]索引详解

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 1.什么是索引? 当我们想要在书中查找某个知识点时 , …

MySQL:索引特性

索引 0. 预备知识 索引是一个“物美价廉”的特性&#xff0c;用来提高数据库的性能。不需要改程序、调SQL、只需要正确的创建索引&#xff0c;查询速度就能提高成百上千倍&#xff0c;但查询速度的提升也带来了插入、更新、删除速度的下降。 0.1 认识磁盘 MySQL对数据进行增…

MySQL的索引与事务

作者&#xff1a;敲代码の流川枫 博客主页&#xff1a;流川枫的博客 专栏&#xff1a;和我一起学java 语录&#xff1a;Stay hungry stay foolish 给大家推荐一款好用的神器Apifox Postman Swagger Mock JMeter。集接口文档工具、接口Mock工具、接口自动化测试工具、接…

什么是 MySQL 索引?

什么是索引&#xff1f; 假设我们有一张数据表 employee(员工表)&#xff0c;该表有三个字段&#xff08;列&#xff09;,分别是name、age 和address。假设表employee有上万行数据(这公司还真大&#xff09;&#xff0c;现在需要从这个表中查找出所有名字是‘ZhangSan’的雇员信…

MySQL 索引结构

前言 在上一篇 MySQL 索引类型 中&#xff0c;我们已经了解了索引的基本概念以及分类&#xff0c;那么&#xff0c;索引的结构是什么样的&#xff1f;为什么索引可以这么快&#xff1f;这一篇文章将继续探讨索引的实现原理和数据结构&#xff0c;主要介绍 B 树索引和 Hash 索引…

MySQL中索引的使用方法

1. 为什么要加索引&#xff1f; ​一般的应用系统&#xff0c;读写比例在10:1左右&#xff0c;而且插入和一般的更新操作很少出现性能问题&#xff0c;遇到最多的&#xff0c;也是最容易出问题的&#xff0c;还是一些复杂的查询操作&#xff0c;所以查询语句的优化显然是重中之…

MySQL 索引概览

前言 在 SQL 优化中&#xff0c;索引是至关重要的一环&#xff0c;能给查询效率带来质的飞跃&#xff0c;但是索引并不是万能的&#xff0c;不合理的索引设计甚至会拖慢查询效率。本文将详细介绍索引的概览和分类&#xff0c;并讨论使用索引时应该权衡的要素&#xff0c;关于索…

MYSQL的索引和存储引擎

文章目录 MYSQL的索引和存储引擎介绍索引的分类单列索引-普通索引单列索引-唯一索引单列索引-主键索引组合索引全文索引空间索引 索引内部原理剖析索引内部原理-Hash算法索引内部原理-二叉树和二叉平衡树索引内部原理-BTREE树MyISAM存储引擎InnoDB存储引擎 索引的特点索引的创建…

mysql 索引使用与优化

前言 索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么讲,随着业务数据量的不断增长,优化系统的响应速度,很大程度上可以说就是集中在索引的优化上; mysql索引原理 在正式了解与学习mysql索引之前,先对mysql的索引原理再次回…

MySql之索引

1.索引概述 MySql官方对索引的定义为&#xff1a;索引是帮助MySql高效获取数据的数据结构。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用数据&#xff0c;这样就可以在这些数据结构上实现高级查找算法&#xf…

Mysql 索引

图片来源网络&#xff0c;侵删。图片来源于掘金小册 索引 Mysql 的索引类型有很多种&#xff0c;Hash索引&#xff0c;B树索引&#xff0c;B树索引和全文索引。Mysql有多种存储引擎&#xff0c;每个存储引擎对索引的支持可能会不同。 What Mysql 索引是能改善数据库表随机访…

一文搞懂 MySQL 索引

一文搞懂 MySQL 索引 1、MySQL 索引 简介 1.1、MySQL 索引 是什么&#xff1f; 索引是一个单独的、存储在 磁盘 上的 数据库结构 &#xff0c;包含着对数据表里 所有记录的 引用指针。 1.2、 MySQL 索引 的存储类型有哪些&#xff1f; MySQL中索引的存储类型有两种&#xff0c…

一文搞懂MySQL索引所有知识点(建议收藏)

Mysql索引 索引介绍 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说&#xff0c;数据库索引好比是一本书前面的目录&#xff0c;能加快数据库的查询速度。 一般来说索引本身也很大&#xff0c;不可能全部存储在内存中&#xff0c;因此索引往往是存储…

python中的%用法

python中%&#xff1a; 1. 求模运算&#xff0c;相当于mod&#xff0c;也就是计算除法的余数&#xff0c;比如5%2就得到1。 2. %还用在python的格式化输出&#xff0c;比如&#xff1a; 说明如下&#xff1a; %[(name)][flags][width].[precision]typecode (name) 为命名 fl…

python中的消息弹窗

在写python代码中,经常要弹窗提示一下消息情况,因为有时候我同时用了多个ui框架,比如tkinter,pyqt等,经常找不到合适的弹窗模块。因此梳理了一下几种弹窗方案。 一、采用windows自带的api(需要导入win32api) 特别强调采用这种方案,这种方案的优势就是弹窗模态,并不需…

Python 中的\r 字符

今天遇到了\r&#xff0c;然后就比较懵了&#xff0c;这里简单记录一下\r字符在Python中的应用。 \r&#xff1a;将光标回退到开始位置 先来看一个示例代码&#xff1a; import timetext "Hello\rWorld!" for i in text:time.sleep(0.5)print(i, end"")…

python中flag的用法_python中flag什么意思

python中flag一般就是标记、标识的意思 比如&#xff1a;&#xff08;推荐学习&#xff1a;Python视频教程&#xff09;#!/usr/bin/python # -*- coding: UTF-8 -*- x 7 i 1 flag 0 while i < 100: if (x%2 1) and (x%3 2) and (x%5 4) and (x%65): flag 1 e…