Nginx配置详解

2023-10-29

1 基本概念
1.1 Nginx简介
Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

1.2 正向代理
需要客户自己在浏览器配置代理服务器地址。

例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。

1.3 反向代理
反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

1.4 负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。

1.5 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

2 常用命令
进入到下面的目录,然后使用命令

cd /usr/local/nginx/sbin
2.1 查看Nginx版本号
./nginx -v
2.2 启动Nginx
./nginx
2.3 关闭Nginx
./nginx -s stop
2.4 重新加载Nginx
./nginx -s reload
2.5 重启Nginx
./nginx -s reopen
2.6 优雅停止Nginx
./nginx -s quit
2.7 测试配置文件是否正确
./nginx -t
3 配置文件
配置文件所在位置:
/usr/local/nginx/conf/nginx.conf

3.1 配置文件组成
由全局块+events块+http块组成

3.2 全局块
从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。

worker_processes 1;
#这个是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。
3.3 events块
events块设计的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。下面的例子表示每个work process支持的最大连接数为1024。这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。

events {
worker_connections 1024;
}
3.4 http块
Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。

3.4.1 http全局块
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。

3.4.2 server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

每个server块也可以分为全局server块,以及可以同时包含多个location块。

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

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

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

4 配置实例
4.1 反向代理
4.1.1 实例一
4.1.1.1 目标
访问http://ip,访问到的是Tomcat的主页面http://ip:8080。

4.1.1.2 环境
Nginx+JDK8+Tomcat

4.1.1.3 配置文件
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
#server_name localhost;
server_name 192.168.71.167;
location / {
root html;
#添加下面的一句话
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.1.1.4 重新加载Nginx配置文件
/usr/local/nginx/sbin/nginx -s reload
4.1.1.5 测试
访问:http://192.168.71.167/,看到的是Tomcat的首页。

4.1.2 实例二
4.1.2.1 目标
根据访问的路径跳转到不同的服务器中去。

访问http://ip:9001/edu 直接跳到http://127.0.0.1:8080/edu

访问http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod

4.1.2.2 环境
Nginx+JDK8+配置两个Tomcat,Tomcat的配置不再讲述。

4.1.2.3 配置文件
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#实例一的配置
server {
listen 80;
#server_name localhost;
server_name 192.168.71.167;
location / {
root html;
#添加下面的一句话
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#实例二的配置
server {
listen 9001;
server_name 192.168.71.167;
location ~/edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/vod/ {
proxy_pass http://127.0.0.1:9090;
}
}

}
4.1.2.4 重新加载Nginx配置文件
/usr/local/nginx/sbin/nginx -s reload
4.1.2.5 测试
访问
http://192.168.71.167:9001/edu/a.html跳到了http://127.0.0.1:8080/edu/a.html页面。

访问
http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html页面。

4.1.3 proxy_set_header
假如Nginx代理服务器Server的配置为:192.168.71.167:9001,跳到:127.0.0.1:8080,访问者的IP为:192.168.71.200:20604。

4.1.3.1 Host
proxy_set_header Host h o s t : host:host:server_port;

Host的值为192.168.71.167:9001
4.1.3.2 X-Real-IP
proxy_set_header X-Real-IP $remote_addr;

X-Real-IP的值为:192.168.71.200
4.1.3.3 X-Real-PORT
proxy_set_header X-Real-PORT $remote_port;

X-Real-PORT的值为:20604
4.1.3.4 X-Forwarded-For
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

X-Forwarded-For的值为:192.168.71.200
4.2 负载均衡
4.2.1 目标
通过访问
http://192.168.71.167/edu/a.html,实现负载均衡的效果,平均分摊到8080和8081端口中。

4.2.2 环境
Nginx+JDK8+2台Tomcat,一台8080,一台8081。

4.2.3 配置文件
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

upstream myserver{
  #ip_hash;
  server 192.168.71.167:8080 weight=1;
  server 192.168.71.167:8081 weight=1;
}

server {
    listen       80;
    #server_name localhost;
    server_name  192.168.71.167;
    location / {
        root   html;
                    proxy_pass http://myserver;
                    proxy_connect_timeout 10;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

}


4.2.4 测试
访问:
http://192.168.71.167/edu/a.html,8080和8081交替访问。

4.2.5 策略
1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2 weight

weight代表权重,默认为1,权重越高被分配的客户端越多。

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3 ip_hash

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

upstream myserver{
ip_hash;
server 192.168.71.167:8080 weight=1;
server 192.168.71.167:8081 weight=1;
}
4 fair(第三方)

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

upstream myserver{
fair;
server 192.168.71.167:8080 weight=1;
server 192.168.71.167:8081 weight=1;
}
4.3 动静分离
4.3.1 准备工作
mkdir /data
cd /data
mkdir www #在www文件夹里放个a.html
mkdir image #在image文件夹里放个1.jpg
4.3.2 配置文件
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.71.167;

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

    location /image/ {
        root   /data/;
                    autoindex on;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
}
4.3.3 测试
访问图片:
http://192.168.71.167/image/1.jpg

访问页面:
http://192.168.71.167/www/a.html

访问目录:
http://192.168.71.167/image/(因为设置了autoindex on;)

4.4 高可用集群
4.4.1 环境准备
两台机器,每台机器都装有keepalived+Nginx+Tomcat。

4.4.2 安装keepalived
yum -y install keepalived
#检查是否安装
rpm -q -a keepalived
#安装的配置文件位置
/etc/keepalived/keepalived.conf
#启动和关闭
systemctl start keepalived
systemctl stop keepalived
4.4.3 完成高可用配置
主备keepalived服务器中只有master一台机器会出现VIP地址,否则会出现脑裂问题。

4.4.3.1 主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
router_id 192.168.71.167
}
vrrp_script nginx_check
{
script “/usr/local/src/nginx_check.sh”
#(每秒检查一次)
interval 1
weight -30
}
vrrp_instance VI_1 {
state MASTER
interface ens33
#虚拟路由ID,小于255,最终用于构成虚拟MAC地址,必须与backup一致
virtual_router_id 51
#优先级,0-254
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.71.100
}
track_script {
nginx_check
}
}
4.3.3.2 备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
router_id 192.168.71.168
}
vrrp_script nginx_check
{
script “/usr/local/src/nginx_check.sh”
#(每秒检查一次)
interval 1
weight 2
}
vrrp_instance VI_1 {
state backup
interface ens33
#虚拟路由ID,小于255,最终用于构成虚拟MAC地址,必须与backup一致
virtual_router_id 51
#优先级,0-254
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.71.100
}
track_script {
nginx_check
}
}
4.3.3.3 chk_nginx.sh脚本
#!/bin/bash
A=ps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then
#发现停止后,自动启动
/usr/local/nginx/sbin/nginx
sleep 2
#重启不成功,则kill掉keepalived
if[ ps -C nginx --no-header |wc -l -eq 0 ];then
systemctl stop keepalived
fi
fi
【提示】脚本要加+x的执行权限:chmod +x chk_nginx.sh

4.4.4 Nginx里配置
在Nginx里把虚拟IP配置进去即可。

五 原理介绍
5.1 master&worker
一个Nginx是由一个master进程和多个worker进程组成的。

5.2 worker如何工作的
客户端发送请求到Master,然后给worker,再由这些work争抢处理这个请求。

5.3 一个master多个worker的好处
1 可以使用nginx -s reload进行热部署方式;

2 每个worker是独立的进程,如果有其中的一个worker出现了问题,其他worker独立的继续进行争抢,实现请求的过程,不会造成服务的中断;

5.4 设置多少个worker合适
Nginx和Redis类似,都采用了io多路复用机制。每个worker进程都可以把CPU发挥到极致,一般来说worker数和服务器的CPU数相等是最为适宜的。

如4个CPU
worker_processes 4;
5.5 worker_connection连接数
5.5.1 请求占用的连接数
发送请求:访问静态资源占用2个连接,反向代理占用4个连接。

5.5.2 最大并发
访问静态资源:最大连接数=worker_processesworker_connections/2
反向代理:最大连接数=worker_processesworker_connections/4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx配置详解 的相关文章

  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • Java 8 可选

    我想检查特定对象大小是否大于 0 如果它大于 0 那么我想创建一个可选对象 如果不是 那么我想返回一个可选的空对象 这是java代码的长版本 if fooA size gt 0 return Optional of new Foo else
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • 是否有任何理由使用 ZoneId.of("UTC") 而不是 ZoneOffset.UTC ?

    有什么理由使用ZoneId of UTC 代替ZoneOffset UTC 我们知道两者之间的区别 如ZoneOffset UTC 和 ZoneId of UTC 之间有什么区别 https stackoverflow com questi
  • 带嵌入式 tomcat 的 spring-boot 不会将请求分派到控制器

    我有一个使用 spring boot 和嵌入式 Tomcat 容器的应用程序 据我所知 我的代码与 spring boot 相同示例项目 https github com spring projects spring boot tree m
  • Byte[] 和 java.lang.OutOfMemoryError 按位读/写文件

    我正在努力擦除 Android 中的一些可用空间 这是我的代码 private void creatingFileDelete int size int passMode File lastFile new File Environment
  • 简单的Java程序插入USB热点后速度慢100倍

    我有以下Java程序 class Main public static void main String args throws java io IOException long start System nanoTime java io
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 当框架被拖动时,如何设置 JWindow 的位置位于文本字段下方?

    我正在制作一个自动完成项目 就像谷歌一样 我的框架中有一个 jtextfield 每当我在该字段中输入内容时 该文本字段下方就会出现一个 JWindow 并且该窗口来自另一个类 现在的问题是 每当我拖动框架时 如何使窗口始终出现在文本字段下
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

    我正在使用 spring jdbc 模板 使用存储过程创建记录 public Long create City obj SimpleJdbcCall jdbcCall new SimpleJdbcCall getJdbcTemplate g

随机推荐

  • Java 正确的做字符串编码转换

    Java 正确的做字符串编码转换 字符串的内部表示 字符串在java中统一用unicode表示 即utf 16 LE 对于 String s 你好哦 如果源码文件是GBK编码 操作系统 windows 默认的环境编码为GBK 那么编译时 J
  • 2013年度总结 -- 向着IT前进

    各位朋友 请将手机调整到飞行模式 我们将乘时光机回到2013年元月 一起见证作者Mr Chen在过去这一年里的 丰功伟绩 现在开始闭上眼睛 进入倒计时10 9 8 7 6 5 4 3 2 1 2013年元月 上线前的冲刺 兄弟们 辛苦一下
  • 【工具使用】STM32CubeMX-DMA配置(ADC+DMA 和 UART+DMA)

    一 概述 无论是新手还是大佬 基于STM32单片机的开发 使用STM32CubeMX都是可以极大提升开发效率的 并且其界面化的开发 也大大降低了新手对STM32单片机的开发门槛 本文主要讲述STM32芯片的DMA的配置及其相关知识 二 软件
  • 计算机快捷键大全截图,电脑截图快捷键是哪个?电脑快捷键使用大全

    原标题 电脑截图快捷键是哪个 电脑快捷键使用大全 在电脑日常工作中 截图是经常会使用到的功能 相信绝大数的用户都是通过第三方截图软件 比如QQ 旺旺等程序自带的电脑截图功能 却不知道Win系统中也是自带截图工具 和键盘上某键配合使用 键盘上
  • Vue 路由的params参数

    1 路由的params参数 1 配置路由 声明接收params参数 routes path about component About component Home children path news component News com
  • android flash无图标,Android - Android - 安装应用(APP) 不显示桌面图标、隐藏图标

    PackageManager COMPONENT ENABLED STATE ENABLED 显示应用图标 PackageManager COMPONENT ENABLED STATE DISABLED 隐藏应用图标 我用这俩个值来显示和隐
  • 天龙3d服务器维护,《新天龙八部》2017年3月6日全服更新维护公告

    亲爱的玩家 大家好 为保证游戏运行的稳定性 提升整体服务质量 新天龙八部 游戏全部服务器 部分服务器将提前至5 00维护 具体服务器列表请见公告下方 将于2017年3月6日7 00 9 00进行更新维护 维护后版本号升级为3 61 5303
  • -bash: /usr/bin/yum: No such file or directory解决方案

    删除了yum文件 导致yum命令出现 bash情况 root localhost yum bash usr bin yum No such file or directory 解决方案 http mirrors 163 com centos
  • el-select下拉框:数据回显后,无法重新选中或修改

    选中其他值以后 数据并没有发生改变 且无法选中 解决 给el select 点击事件 change getTeacherId 强制数据刷新 表单同理 input getTeacherId getTeacherId val this next
  • 数据可视化第四章

    比例数据 是根据类别 子类别和群体来进行划分的数据 对于比例 通常想要得到最大值 最小值和总体分布 前两者比较简单 将数据由小到大进行排列 位于两端的分别就是最小值和最大值 数据对比也是比例可视化的一个重要应用 在一个图表中集中反映多个维度
  • 小程序页面滚动穿透

    小程序页面滚动穿透 一 场景 框架 Taro2 Taro3不生效的 在项目当中 基础遇到这样的需求 有一个长列表 或者其他可滚动展示的页面 在这个页面会弹出一个Modal层 如下 贝壳找房的 的筛选栏 二 问题 如果这个弹框内容不可滚动 不
  • java 获取系统 默认编码_Java获取Linux服务器系统默认编码格式

    一 查找java进程 ps ef grep java 二 使用jinfo命令查看java系统参数 jinfo sysprops 进程id Usage jinfo option to connect to running process ji
  • 建立良好人际关系的原则

    1 尊重原则 尊重包括两个方面 自尊和尊重他人 自尊就是在各种场合都要尊重自己 维护自己的尊严 不要自暴自弃 尊重他人就是要尊重别人的生活习惯 兴趣爱好 人格和价值 只有尊重别人才能得到别人的尊重 2 真诚原则 只有诚以待人 胸无城府 才能
  • 【图论——第四讲】dijkstra算法求单源最短路及其堆优化

    o 大家好 欢迎大家光临我的博客 面向阿尼亚学习 算法学习笔记系列持续更新中 文章目录 一 前言 二 朴素dijkstra算法 三 堆优化版dijkstra 最后 一 前言 单源最短路 指的是求一个点 到其他所有点的最短距离 即起点是固定的
  • linux系统中函数库,Linux函数库(静态函数库和动态函数库)及安装过程

    Linux 系统中存在大量的函数库 简单来讲 函数库就是一些函数的集合 每个函数都具有独立的功能且能被外界调用 我们在编写代码时 有些功能根本不需要自己实现 直接调用函数库中的函数即可 需要注意的是 函数库中的函数并不是以源代码的形式存在的
  • 从0到1设计通用数据大屏搭建平台

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Python 多线程、多进程、协程对迭代数据的耗时操作测试

    Python 多线程 多进程 协程对迭代数据的耗时操作测试 2023 03 29 CPU计算密集型 2 17s p Python中的多线程受GIL制约 因此表面上的并行 实际上是并发 完全的计算密集型任务就和串行的耗时差不多了 Deal 耗
  • 阿里云数据库配置IP白名单操作方法(以MySQL为例)

    阿里云数据库RDS创建成功后 首次连接访问RDS需要配置IP白名单 在阿里云RDS控制台即可配置IP白名单 阿里云百科来详细说下阿里云服务器RDS配置白名单的方法 阿里云服务器配置IP白名单 阿里云百科以MySQL云数据库为例 RDS My
  • vc++常见错误之二:“fatal error C1083: ”无法打开包括文件

    这个问题产生的情况有多种 解决方法也有多种 我集合了网上的各种可能 可能不全 希望对你有用 其一 原文链接 http www cnblogs com txg blog archive 2011 03 07 1974857 html 步骤1
  • Nginx配置详解

    1 基本概念 1 1 Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器 特点是占用内存少 并发能力强 事实上Nginx的并发能力确实在同类型的网页服务器中表现好 Nginx专为性能优化而开发 性能是其最重要的考量 实现上非常