Linux中安装Nginx及日常配置使用

高性能的http服务器/反向代理服务器。官方测试支持5万并发,CPU、内存等消耗较低且运行稳定

使用场景

  • Http服务器。
    Nginx可以单独提供Http服务,做为静态网页的服务器。
  • 虚拟主机。
    可以在一台服务器虚拟出多个网站。
  • 反向代理与负载均衡。
    Nginx做反向代理,可以使多个服务器之间分担负载,不会造成某台服务器负载高宕机或者某台服务器十分闲置。

Linux环境安装Nginx

官方网站

  1. 安装依赖包
# SSL功能需要openssl库,直接通过yum安装: 
yum install openssl

# gzip模块需要zlib库,直接通过yum安装: 
yum install zlib

# rewrite模块需要pcre库,直接通过yum安装: 
yum install pcre

或者直接安装以上三个依赖,命令:

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

在这里插入图片描述
在这里插入图片描述

  1. 创建一个用于存放Nginx的文件夹在这里插入图片描述

  2. 下载Nginxtar包到自己的文件夹。
    命令:wget http://nginx.org/download/nginx-1.22.0.tar.gz
    提示:wget: command not found
    解决:yum -y install wget
    在这里插入图片描述
    在这里插入图片描述

  3. 解压tar包。
    命令:tar -xvf nginx-1.22.0.tar.gz nginx
    在这里插入图片描述

  4. 安装模块。
    进入Nginx目录,执行命令:
    ./configure
    报错:./configure: error: C compiler cc is not found
    解决:yum -y install gcc gcc-c++ autoconf automake make
    报错:./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option.
    解决:yum install -y zlib-devel
    在这里插入图片描述

  5. 安装Nginx
    命令: make install
    在这里插入图片描述

  6. 安装完成


Nginx常用命令

进入Nginx安装目录下的sbin目录

  1. 启动
    命令:./nginx
    在这里插入图片描述

  2. 查看是否启动
    命令:ps ef | grep nginx
    在这里插入图片描述

  3. 关闭
    命令:nginx -s stop或者nginx -s quit

  4. 重启,重新加载配置文件
    命令:nginx -s reload

  5. 修改conf下监听端口为81


防火墙配置

  1. 查看所有打开的端口
    命令:firewall-cmd --zone=public --list-ports
    在这里插入图片描述

  2. 开放指定端口号
    命令:firewall-cmd --zone=public --add-port=81/tcp --permanent
    在这里插入图片描述

  3. 重新载入
    命令:firewall-cmd --reload
    在这里插入图片描述


Nginx无法重启

描述:Restarting nginx daemon: nginxnginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) nginx not running

解决:Nginx -c参数指定配置文件解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf


Nginx访问

【IP + 端口号 80默认不显示】
在这里插入图片描述


Nginx基本配置说明

  • main:全局设置。影响其他部分所有设置。
  • server:主机服务相关设置,主要用于指定虚拟主机域名、IP和端口号等。
  • location:URL匹配特定位置后的设置,反向代理、内容篡改的相关设置。
  • upstream:上游服务器设置和负载均衡相关设置。

Nginx常用功能配置

反向代理
server {
    listen 80;
    server_name wh.test.com;
    location /api {
        # 反向代理的地址
        # 所有 /api 的接口访问都代理到 7075 端口
            例如:wh.test.com/api/login.do -> http://localhost:7050/login.do
        proxy_pass http://localhost:7075/;
    }
}

访问控制:黑名单
server {
    location / {
        # 屏蔽单个ip访问
        deny 172.16.60.220;
        
        # 屏蔽所有ip
        deny all;
        
        # 允许ip访问
        allow 172.16.60.220;
    }
}

在这里插入图片描述
在这里插入图片描述


负载均衡:轮询

每次请求会按时间顺序逐一分配到不同的服务器,如果有服务宕机,Nginx会剔除掉宕机服务器,继续分配请求。

如果其中一台服务器压力太大,出现延迟,会影响所有的这台服务器下的用户请求。

http {  
    upstream test.com {  
        server 192.168.10.1:8081;  
        server 192.168.10.2:8082;  
        server 192.168.10.3:8083;  
    }  
    server {  
        location /test {  
            proxy_pass  http://test.com/;  
        }  
    }  
}

负载均衡:权重

理想状态下,10次请求中有6次请求了8081,1次请求了8082,3次请求了8083

http {  
    upstream test.com {  
        server 192.168.10.1:8081 weight=6;  
        server 192.168.10.2:8082 weight=1;  
        server 192.168.10.3:8083 weight=3;  
    }  
    server {  
        location /test {  
            proxy_pass  http://test.com/;  
        }  
    }  
}

负载均衡:Hash

计算方式:abs(客户端ip.hash())%服务器数量。

客户端的IP地址是唯一不变的。所以,通过hash算法计算出ip地址对应的哈希值,通过哈希码值对服务器数量进行一个求模式运算。这样就可以保持每个客户端访问的服务器是保持不变的。因为哈希算法散列的特点,也可以近似的当作平均分配。

http {  
    upstream test.com {  
        ip_hash;
        server 192.168.10.1:8081;  
        server 192.168.10.2:8082;  
        server 192.168.10.3:8083;  
    }  
    server {  
        location /test {  
            proxy_pass  http://test.com/;  
        }  
    }  
}

负载均衡:最小连接数

基于最小连接的负载均衡方式,Nginx会将请求发送给当前处理请求数量最少的服务器上,用来分担各个服务器之间的压力。

http {  
    upstream test.com {  
        least_conn;
        server 192.168.10.1:8081;  
        server 192.168.10.2:8082;  
        server 192.168.10.3:8083;  
    }  
    server {  
        location /test {  
            proxy_pass  http://test.com/;  
        }  
    }  
}

gzip压缩

开启gzip压缩可以减少http传输过程中文件的大小。可以极大提高网站的访问速度。

gzip  on; # 开启gzip 压缩
gzip_types; # 要采用 gzip 压缩的 MIME 文件类型,其中 text/html 被系统强制启用
gzip_static on; # 默认 off,该模块启用后,Nginx 首先检查是否存在请求静态文件的 gz 结尾的文件,如果有则直接返回该 .gz 文件内容
gzip_proxied expired no-cache no-store private auth; # 默认 off,nginx 做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩
gzip_buffers 16 8k; # 获取多少内存用于缓存压缩结果,16 8k 表示以 8k*16 为单位获得
gzip_min_length 1k; # 允许压缩的页面最小字节数,页面字节数从 header 头中的 Content-Length 中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大
gzip_comp_level 4; # gzip 压缩比,压缩级别是 1-91 压缩级别最低,9 最高,级别越高压缩率越大,压缩时间越长,建议 4-6
gzip_http_version 1.0; # 默认 1.1,启用 gzip 所需的 HTTP 最低版本
gzip_vary off; # 用于在响应消息头中添加 VaryAccept-Encoding,使代理服务器根据请求头中的 Accept-Encoding 识别是否启用 gzip 压缩
gzip_disable "MSIE [1-6]\.";// 指定哪些不需要 gzip 压缩的浏览器

Http静态资源服务器
server {  
  listen       80;  
  server_name  localhost;  

  #后台管理
  location /handadmin{
      alias  /opt/home/handbook/dist/;
      index index.html;
  }  
}

动静分离

Nginx设置expires可以指定访问缓存。设置之后,用户在指定的时间都只会访问浏览器中的缓存,而不会去请求Nginx

# 静态请求
location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js) {  
    root /usr/local/dist;  
    expires 10h; # 设置过期时间为10小时  
}  

# 动态请求
location ~ \.(do) {  
    proxy_pass  127.0.0.1:8081;  
} 

图片防盗链

防止其他网站利用外链访问服务器图片

server {  
    listen 8081;  
    server_name  localhost;  

    # 图片防盗链  
    location ~* \.(gif|jpg|jpeg|png|bmp|swf) {  
        valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com;  
        # 只允许本机 IP 外链引用,将百度和谷歌也加入白名单有利于 SEO  
        if (invalid_referer){  
            return 403;  
        }  
    }  
} 

适配PC

根据用户请求的user-agent来判断返回PC还是H5

server {  
    listen 80;  
    server_name test.com;  

    location / {  
     root  /usr/local/app/pc; # pc 的 html 路径  
        if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {  
            root /usr/local/app/mobile; # mobile 的 html 路径  
        }  
        index index.html;  
    }  
} 

设置二级域名
server {  
    listen 80;  
    server_name admin.test.com; // 二级域名  

    location / {  
        root  /usr/local/app/admin; # 二级域名的 html 路径  
        index index.html;  
    }  
} 

配置Https
server{  
    listen 443 ssl http2; # 这里还启用了 http/2.0
    ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem; # 证书文件地址  
    ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem; # 私钥文件地址  
    server_name test.com www.test.com; # 证书绑定的域名  
}

配置Http转Https
server {  
    listen      80;  
    server_name  www.test.com;  

    # 单域名重定向  
    if (host = 'www.test.com'){  
        return 301 https://www.test1.com;  
    }  

    # 全局非 https 协议时重定向  
    if (scheme != 'https') {  
        return 301 https://server_name$request_uri;  
    }  

    # 或者全部重定向  
    return 301 https://server_name$request_uri;  
}

禁止指定user_agent
# http_user_agent 为浏览器标识  
# 禁止 user_agent 为baidu、360和sohu,~*表示不区分大小写匹配  
if (http_user_agent ~* 'baidu|360|sohu') {  
    return 404;
}  

# 禁止 Scrapy 等工具的抓取  
if (http_user_agent ~* (Scrapy|Curl|HttpClient)) {  
    return 403; 
}

#### 请求过滤
#### 根据请求类型过滤

# 非指定请求全返回 403  
if ( request_method !~ ^(GET|POST|HEAD) ) {  
    return 403;  
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/401276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL注入之DNSLog外带注入

一、认识&#xff1a; 什么是dnslog呢&#xff1f; DNS就是域名解析服务&#xff0c;把一个域名转换成对应的IP地址&#xff0c;转换完成之后&#xff0c;DNS服务器就会有一个日志记录本次转换的时间、域名、域名对应的ip、请求方的一些信息&#xff0c;这个日志就叫DNSLog。…

基于 java springboot+layui仓库管理系统

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

好书推荐| After Effects 2022案例实战全视频教程

After Effects 2022案例实战全视频教程 作者 &#xff1a;王红卫 书号&#xff1a;9787302631958 定价&#xff1a;99元 出版时间&#xff1a;2023年7月 作者介绍 王红卫 拥有多年设计师的经学经验&#xff0c;北京理工大学百事特教师&#xff0c;水木风云工作室创始人&a…

网络编程知识整理

目录 1.1 引言 1.2 分层 1.3 TCP/IP的分层 1.4 互联网的地址 1.5 域名服务 1.6 封装 1.7 分用 1.8 端口号 1.1 引言 很多不同的厂家生产各种型号的计算机&#xff0c;它们运行完全不同的操作系统&#xff0c;但 T C P / I P协议族允许它们互相进行通信。这一点很让人感…

⭐北邮复试刷题105. 从前序与中序遍历序列构造二叉树__递归分治 (力扣每日一题)

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

论文精读--word2vec

word2vec从大量文本语料中以无监督方式学习语义知识&#xff0c;是用来生成词向量的工具 把文本分散嵌入到另一个离散空间&#xff0c;称作分布式表示&#xff0c;又称为词嵌入&#xff08;word embedding&#xff09;或词向量 Abstract We propose two novel model architec…

Go 中的 init 如何用?它的常见应用场景有哪些呢?

嗨&#xff0c;大家好&#xff01;我是波罗学。本文是系列文章 Go 技巧第十六篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 Go 中有一个特别的 init() 函数&#xff0c;它主要用于包的初始化。init() 函数在包被引入后会被自动执行。如果在 main 包中&#xff0c;它也…

四、分类算法 - 随机森林

目录 1、集成学习方法 2、随机森林 3、随机森林原理 4、API 5、总结 sklearn转换器和估算器KNN算法模型选择和调优朴素贝叶斯算法决策树随机森林 1、集成学习方法 2、随机森林 3、随机森林原理 4、API 5、总结

Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

1、NFS介绍 NFS&#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;允许客户端远程访问服务器上的文件&#xff0c;实现数据共享。它整合多个存储设备为统一文件系统&#xff0c;方便数据存储和管理&#xff0c;支持负载均衡和故障转移&#xf…

[设计模式Java实现附plantuml源码~行为型]协调多个对象之间的交互——中介者模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

内网穿透——NPS突然无法连接

温馨提示 &#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f32d;&#x1f32d;&#x1f32d;&#x1f32d;&#x1f32d;&#x1f32d;&#x1f32d;❤️❤️❤️❤️❤️❤️❤️&#x1f968;&#x1f968;&#x1f9…

Go语言中的TLS加密:深入crypto/tls库的实战指南

Go语言中的TLS加密&#xff1a;深入crypto/tls库的实战指南 引言crypto/tls库的核心组件TLS配置&#xff1a;tls.Config证书加载与管理TLS握手过程及其实现 构建安全的服务端创建TLS加密的HTTP服务器配置TLS属性常见的安全设置和最佳实践 开发TLS客户端应用编写使用TLS的客户端…

基于springboot+vue的B2B平台的购物推荐网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

数据结构 计算结构体大小

一、规则&#xff1a; 操作系统制定对齐量&#xff1a; 64位操作系统&#xff0c;默认8Byte对齐 32位操作系统&#xff0c;默认4Byte对齐 结构体对齐规则&#xff1a; 1.结构体整体的大小&#xff0c;需要是最大成员对齐量的整数倍 2.结构体中每一个成员的偏移量需要存在…

Bert基础(三)--位置编码

背景 还是以I am good&#xff08;我很好&#xff09;为例。 在RNN模型中&#xff0c;句子是逐字送入学习网络的。换言之&#xff0c;首先把I作为输入&#xff0c;接下来是am&#xff0c;以此类推。通过逐字地接受输入&#xff0c;学习网络就能完全理解整个句子。然而&#x…

物联网在智慧景区中的应用:提升游客体验与运营效率

目录 一、物联网技术概述 二、物联网在智慧景区中的应用 1、智能门票系统 2、智能导览系统 3、智能安全监控系统 4、智能环保系统 三、物联网在智慧景区中提升游客体验 1、提高游览便捷性 2、个性化服务体验 3、提升游客安全感 四、物联网在智慧景区中提升运营效率 …

算法--动态规划(背包问题)

这里写目录标题 总览dp问题的优化01背包问题概述算法思想算法思想中的注意点例题代码 完全背包问题概述 多重背包问题概述 分组背包问题概述 总览 dp问题的优化 要清楚&#xff1a;dp问题的优化一般是对dp问题的代码或者计算方程做一个等效变形 有了这个前提&#xff0c;我们在…

浅谈maven的生命周期

正文: 在Maven中,生命周期定义了项目构建过程的不同阶段以及在每个阶段中执行的插件目标。Maven的生命周期是由一系列阶段组成的,每个阶段都有一个唯一的标识符。 Clean生命周期:用于清理项目的构建目录。它包含以下阶段: pre-clean:执行在清理操作之前的任何操作。clea…

web安全学习笔记【13】——信息打点(3)

信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目[1] #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源…