Ubuntu搭建配置Nginx

2023-11-04

目录

一、安装Nginx

方式一:官方网址:http://nginx.org/en/download.html

方式二:使用apt安装

二、启动Nginx

三、nginx配置文件介绍

1、nginx 文件结构

2、默认的配置 

3、nginx的基本配置

四、nginx虚拟主机配置

五、nginx全局变量

六、Nginx主要配置 

1、静态Http服务器配置

2、反向代理服务器配置

3、负载均衡配置

4、虚拟主机配置


一、安装Nginx

方式一:官方网址:http://nginx.org/en/download.html

方式二:使用apt安装

sudo apt install nginx

二、启动Nginx

1、安装后的位置: 

  • /usr/sbin/nginx:主程序
  • /etc/nginx:存放配置文件
  • /usr/share/nginx:存放静态文件
  • /var/log/nginx:存放日志

2、启动并验证效果

service nginx start  # 启动nginx
service nginx reload  # 重新加载nginx配置文件

nginx -s reopen            # 重启 Nginx
nginx -s stop              # 停止 Nginx

nginx -v

在浏览器输入你的ip地址,若出现Wellcome to nginx 就是配置成功。

三、nginx配置文件介绍

1、nginx 文件结构

  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location块:配置请求的路由,以及各种页面的处理情况。
...              # 全局块。配置影响nginx全局的指令。

events {         # events块。配置影响nginx服务器或与用户的网络连接。
   ...
}

http      # http块。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
{
    ...   # http全局块
    server        # server块。配置虚拟主机的相关参数,一个http中可以有多个server。 
    { 
        ...       # server全局块
        location [PATTERN]   # location块。配置请求的路由,以及各种页面的处理情况。
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     # http全局块
}

2、默认的配置 

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
    #    include snippets/fastcgi-php.conf;
    #
    #    # With php-fpm (or other unix sockets):
    #    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #    # With php-cgi (or other tcp sockets):
    #    fastcgi_pass 127.0.0.1:9000;
    #}

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


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#    listen 80;
#    listen [::]:80;
#
#    server_name example.com;
#
#    root /var/www/example.com;
#    index index.html;
#
#    location / {
#        try_files $uri $uri/ =404;
#    }
#}

3、nginx的基本配置

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       80;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

四、nginx虚拟主机配置

验证配置文件:

root@ubuntu: nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

五、nginx全局变量

  • $remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
  • $remote_user :用来记录客户端用户名称;
  • $time_local : 用来记录访问时间与时区;
  • $request : 用来记录请求的url与http协议;
  • $status : 用来记录请求状态;成功是200;
  • $body_bytes_s ent :记录发送给客户端文件主体内容大小;
  • $http_referer :用来记录从那个页面链接访问过来的;
  • $http_user_agent :记录客户端浏览器的相关信息;
访问链接是:http://localhost:88/test1/test.php 
网站路径是:/var/www/html

$host:localhost
$server_port:88
$request_uri:<a href="http://localhost:88/test1/test.php" rel="external nofollow"   target="_blank">http:</a>//localhost:88/test1/test.php
$document_uri:/test1/test.php
$document_root:/var/www/html
$request_filename:/var/www/html/test1/test.php

六、Nginx主要配置 

1、静态Http服务器配置

        首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。 
配置: 

server {
    listen 80;   # 端口
    server_name localhost  192.168.1.100;   # 域名   
    location / {             # 代表这是项目根目录
        root /usr/share/nginx/www;   # 虚拟目录
    }
}

2、反向代理服务器配置

什么是反向代理? 
        客户端本来可以直接通过HTTP协议访问某网站应用服务器,如果网站管理员在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。

反向代理配置:

server {
    listen 80;
    location / {
        proxy_pass http://192.168.0.112:8080;   # 应用服务器HTTP地址
    }
}

         既然服务器可以直接HTTP访问,为什么要在中间加上一个反向代理,不是多此一举吗?反向代理有什么作用?继续往下看,下面的负载均衡、虚拟主机,都基于反向代理实现,当然反向代理的功能也不仅仅是这些。

3、负载均衡配置

        当网站访问量非常大,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。Nginx可以通过反向代理来实现负载均衡。

负载均衡配置:

upstream myapp {
    server 192.168.0.111:8080;   # 应用服务器1
    server 192.168.0.112:8080;   # 应用服务器2
}
server {
    listen 80;
    location / {
        proxy_pass http://myweb;
    }
}

4、虚拟主机配置

        有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。 
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。

虚拟主机配置:

server {
    listen 80 default_server;
    server_name _;
    return 444;   # 过滤其他域名的请求,返回444状态码
}
server {
    listen 80;
    server_name www.aaa.com;   # www.aaa.com域名
    location / {
        proxy_pass http://localhost:8080;   # 对应端口号8080
    }
}
server {
    listen 80;
    server_name www.bbb.com;   # www.bbb.com域名
    location / {
        proxy_pass http://localhost:8081;   # 对应端口号8081
    }
}

        在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。

        虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,有兴趣的同学可以研究一下HTTP协议。

另外,server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。


        免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表个人立场,如果涉及侵权请联系,将立刻删除涉嫌侵权内容。

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

Ubuntu搭建配置Nginx 的相关文章

  • Kubernetes Pod 已终止 - 退出代码 137

    我需要一些关于 k8s 1 14 和在其上运行 gitlab 管道所面临的问题的建议 许多作业都会抛出退出代码 137 错误 我发现这意味着容器突然终止 集群信息 库伯内特版本 1 14 使用的云 AWS EKS 节点 C5 4xLarge
  • 如何永久清除 linux/ubuntu 终端或 bash 中的所有历史记录? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当您在 Linux 终端中使用向上键时 可以再次使用之前的命令 很棒的功能 但是 我开始使用命令中的敏感详细信息将 mysql 记录到 mysql 中
  • Linux 中不使用 C++ 的 C 异常处理

    Linux 是否提供了 C 语言的异常处理而不求助于 C 或者 实现此类异常处理的最佳方法是什么 目标是避免检查每个调用的函数的返回码 而是执行类似于 C 的线程安全且易于移植的操作 您可以通过为其编写信号处理程序来处理信号 GNU 记录的
  • 我怎样才能重写这个nginx“if”语句?

    例如 我想这样做 if http user agent MSIE 6 0 http user agent MSIE 7 0 etc etc rewrite ROOT ROOT ancient last break 而不是这个 if http
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • 为什么 SDL 在 Mac 上比 Linux 上慢得多?

    我正在研究使用 SDL2 渲染的单线程图形程序 https github com TurkeyMcMac intergrid 请参阅末尾的较小示例 它既可以在旧的 Linux 机器上运行 也可以在不太旧的 Mac 上运行 Linux 计算机
  • 验证 BASH 脚本时出现问题 [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试验证 bash 脚本时出现代码 lint 错误 bin bash if eq 0 then printf No argum
  • 使用 perf 查找线程瓶颈并优化挂机时间

    对 cpu 周期进行采样perf record如果核心利用率大致恒定 则对于寻找优化候选非常有用 但对于具有并行性不同的多个阶段的代码 计算 cpu 周期将重点强调并行阶段 而低估影响挂机时间的顺序或有限并行阶段 简而言之 天真的 perf
  • 在ubuntu 18.04上安装python 2.7

    有没有办法在 Ubuntu 18 04 上安装 Python 2 7 我尝试了这个命令 但它不起作用 sudo apt install python minimal 有没有办法手动安装 我尝试使用 python 2 7 作为不支持 pyth
  • 如何在 Linux 上调用 Python 中的内联机器代码?

    我正在尝试从 Linux 上的纯 Python 代码调用内联机器代码 为此 我将代码嵌入到字节文字中 code b x55 x89 xe5 x5d xc3 然后打电话mprotect http www kernel org doc man
  • 在 UNIX 时间戳 Shell/Bash 中将日期与时区转换

    我需要将日期从格式为 yyyy mm dd hh mm ss TZ 的字符串转换为 UNIX 时间 TZ 时区 到目前为止我所做的是将没有时区的 yyyy mm dd hh mm ss 格式的日期转换为时间戳 dateYMD 2019 2
  • 什么是接口标识符

    我有一台笔记本电脑 使用一个或多个网络适配器连接到我组织的网络 我正在尝试编写一个工具来持续监控每个网络的连接状态和连接质量 然而 我的网络知识有限 术语让我感到困惑 特别是查找所有网络适配器 有人建议我使用命令ifconfig它给了我所谓
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • 无法在 R 中安装插入符号包(在我的 Linux 机器中)

    我在尝试在 R 中安装插入符号包时遇到以下错误 g error tmp Rtmp2Tos7n R INSTALL2e6e30153a74 nloptr nlopt 2 4 2 lib libnlopt cxx a No such file
  • Linux 的 gcc __attribute__((selectany)) 替代方案?

    我想知道是否有替代方案 attribute selectany 在Linux中 我想定义这样的东西 char a qwe zxc 并将其包含在许多链接在一起的 c 文件中 因此链接器将看到 a 的多个定义 因此不会链接 我读过这个属性 se
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 将一个文件写入.c中的另一个文件

    我有一个读取文件然后将其内容复制到另一个文件的代码 我需要使其仅复制每 20 个符号 然后跳过 10 个符号 然后再次跳过 20 个符号 依此类推 我必须使用 lseek 函数 但我不知道如何将所有这些放入循环中来执行此操作 main ar
  • “docker compose up”永远挂起(通常),即使使用 V2,尽管熵很高(Ubuntu)

    我遇到了问题docker compose up命令 因此 我最近创建了一个全新的 Ubuntu 操作系统安装 并且一直在设置我的开发环境 我已经安装了 Docker 并mostly一切似乎都运转良好 启动单个容器按预期工作 例如 docke
  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include

随机推荐

  • oracle 不带时分秒,关于Oracle数据库不带日期中时分秒的查询

    关于Oralce数据库 的日期时间查询 下面我们先来看一组日期数据 表 myDate 列 time 1998 8 7 23 45 33 3 1998 8 7 11 22 21 5 1998 8 7 00 00 00 0 上面列出的这组日期数
  • 50-00-010-配置-kylin-2.6.0官网配置

    文章目录 1 视界 1 Kylin 配置 2 配置文件及参数重写 3 Kylin 配置文件 配置重写 项目级别配置重写 Cube 级别配置重写 MapReduce 任务配置重写 Hive 任务配置重写 Spark 任务配置重写 部署配置 部
  • linux下部分文件管理类基本命令汇总以及bash展开特性介绍

    一 文件管理类基本命令 1 1 表格汇总 今天要讲解的命令如下表所示 按照外部命令和内建命令做基本划分 内建命令列表 命令名字 基本说明 file 检测文件类型 cd 改变shell的工作目录 dirs 显示目录堆栈信息 popd 从堆栈中
  • macOS_Monterey_12.6_21G115可引导可虚拟机安装的纯净版苹果OS系统ISO镜像安装包免费下载

    现在网络上黑果系统出现了许多多合一的多功能版 不是说这些版本不好 只是小编个人觉得 操作系统就是用来使用的 黑果本来就是服务于一些非苹果机的苹果OS爱好者的 简洁稳定应该是首选 固小编毅然放弃那些多功能的豪华版镜像版 独宠我的纯净可引导安装
  • pyqt5重温入门教程:用Qt Designer设计UI

    程序员今晚不回家 抖音号 在开始教程之前 先简单地水几句 之前使用过pyqt5 但是好久没用了 现在因为有一个项目需要 所以在此重温一下 当然教程就不是像零基础那样手把手从安装开始了 这里简洁明了 直接上手操作 第一步 打开Designer
  • 某宝sign参数逆向分析

    说明 淘宝ajax获取数据的方式为jsonp请求 所以在chrome中使用xhr拦截请求中加密参数的方式拦截不到 解决办法 目前我使用的方法是 添加DOM断点的方法去监听页面元素的变化 同时使用charles去监听页面发送的请求 后面就是一
  • 简单粗暴而又很有效果的图片无损放大方法

    工作生活中我们都会碰到想要对图片进行无损放大的情况 比如说做电子相册视频啦 做PPT啦 做设计啦等等等等 但是我们又没有那么专业的技术 PS也能试着操作一下 但始终没法弄能自己想要的效果 我们该如何对图片进行快速的无损放大呢 用PhotoZ
  • uart_linux

    写串口程序 include
  • vue.js中props,watch深度监听对象时,对象新增或者删除属性值时深度监听失效

    使用 deep 选项时 仅会监听对象内部现有属性值的改变 不会监听对象属性的增加或删除操作 原因是 deep 选项仅能监听对象内部属性的改变 当对象新增或删除属性时 这些操作并不会触发属性内部变化引起的更新 解决方案1 this obj O
  • DTFD-MIL: Double-Tier Feature Distillation Multiple Instance Learning for WSI_论文笔记

    文章链接 https arxiv org pdf 2203 12081 pdf 一 摘要 多实例学习 MIL 在组织病理学全切片图像分类中的应用越来越广泛 然而 用于这一特定分类问题的MIL方法仍然面临着独特的挑战 特别是那些与小样本队列相
  • antd4 tree带搜索框的可编辑树实现(hooks+ts)

    需求背景 实现带搜索框的可编辑树 有以下功能在 1 搜索相关节点高亮 2 配合treeSelect规范数据处理 3 节点可添加和编辑 编辑可修改上级 4 节点可删除 5 移入显示编辑图标 0 带搜索框的树 默认数据 搜索exa后 搜索exa
  • c#中的queue和stack

    using System using System Collections 队列Queue的using引用 using System Collections Generic using System Linq using System Te
  • JAVA基础

    目录 1 数据类型 2 注释模式 3 进制 4 浮点数拓展 5 字符拓展 6 运算中不同类型的数据先转化同一类型然后进行运算 7 变量 8 运算符 9 包机制 1 数据类型 强类型语言 变量必须定义才能使用 public class Dem
  • 这几款软件,你千万别装

    目录 写在前面 一 鲁大师 旧版 二 360全家桶 三 2345全家桶 四 快压 结束语 写在前面 很多人都会在自己的电脑上装上Ghost Windows 其实这样并不好 虽然不用激活 但是也有很多的捆绑软件 今天我就为大家盘点一下哪些软件
  • Android8打印功能,[翻译]Android 8.1 默认打印服务的中间人攻击漏洞披露

    漏洞概述 Android 8 1引入了默认打印服务 默认打印服务 基于Mopria联盟在谷歌应用商店发布的免费应用 Mopria Print Service 因其缺乏验证 所以会导致中间人攻击并被拦截后续的打印作业 还会造成在使用潜在不安全
  • 简单易懂SpringBoot和Android上传和下载文件方案——采用URL

    上传思路 SpringBoot把文件保存在静态资源里 并且开启静态资源访问 数据库保存文件的URL地址 URL地址是一个字符串 Android采用OkHttp上传文件 下载思路 SpringBoot从数据库获取URL地址发送给Android
  • Flutter仿网易云音乐:播放界面

    写在前头 本来是要做一个仿网易云音乐的flutter项目 但是因为最近事情比较多 项目周期跨度会比较长 因此分几个步骤来完成 这是仿网易云音乐项目系列文章的第一篇 没有完全照搬网易云音乐的UI 借鉴了其中的黑胶唱机动画 先贴上项目地址 gi
  • FISCO BCOS 贡献者粱永普:联盟链要对区块链做减法

    当前联盟链平台在公有链的基础上 对共识机制做调整 去掉公有属性 使得准入可控 效率提升 这实际上是对区块链在做减法 但这是否足够呢 我们在应用中很快发现 联盟链的使用比较受限制 一条链基本上只能做一项业务 而且成员的扩展会面临很多问题 这个
  • 关于nginx配置负载均衡,nginx.conf配置文件正确,一直跳出nginx欢迎界面

    小编跟大家一样 明明配置文件正确 但就是一直跳出nginx欢迎界面 这个是我nginx的安装目录 我在这个目录下吧nginx conf修改配置 发现没用 于是我看了nginx启动命令 usr local nginx sbin nginx 我
  • Ubuntu搭建配置Nginx

    目录 一 安装Nginx 方式一 官方网址 http nginx org en download html 方式二 使用apt安装 二 启动Nginx 三 nginx配置文件介绍 1 nginx 文件结构 2 默认的配置 3 nginx的基