centos7中安装Nginx和使用Nginx详细操作

环境:
准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。

一、安装

三台虚拟机都安装下面的步骤执行,安装Nginx,为后面的使用演示使用。
1、安装必备组件:

sudo yum install yum-utils

2、配置yum源
在下面的文件目录中创建nginx.repo,并将nginx.repo内容填写进去。

vim /etc/yum.repos.d/nginx.repo

nginx.repo内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

默认情况下,使用稳定版nginx包的存储库。如果想使用mainline版本的nginx包,运行以下命令:

sudo yum-config-manager --enable nginx-mainline

3、安装nginx

sudo yum install nginx

启动:

systemctl start nginx

设置开机启动:

systemctl enable nginx

访问:http://192.168.213.5/

在这里插入图片描述
常用基本操作命令:

nginx -t -c conf/nginx.conf # 检测配置文件是否正常
nginx -s reload -c conf/nginx.conf # 修改配置后平滑重启
nginx -s quit # 优雅关闭Nginx,会在执行完当前的任务后再退出
nginx -s stop # 强制终止Nginx,不管当前是否有任务在执行
二、使用

Nginx配置文件存放的路径:

/etc/nginx

查询nginx相关的文件存放路径:
切换到跟目录:

cd /

查询:

 find -name nginx

在这里插入图片描述

1、静态资源

cd /etc/nginx

/etc/nginx/conf.d目录中的default.conf是默认的配置,如下,静态资源默认存放于/usr/share/nginx/html

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #   root   /usr/share/nginx/html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

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

进入/usr/share/nginx/html,修改index.html
效果入下:
在这里插入图片描述
三台nginx均修改上面的效果,后面演示要用。

备份配置:

 cp nginx.conf nginx.conf.bk

在这里插入图片描述

2、Nginx反向代理-负载均衡

192.168.213.4作为反向代理-负载均衡,192.168.213.5、192.168.213.6作为web服务器。

192.168.213.4配置反向代理-负载均衡:


upstream web_server {
   # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2
   server 192.168.213.5 weight=100 max_fails=2 fail_timeout=30s; 
   server 192.168.213.6 weight=200 max_fails=2 fail_timeout=30s;
}



server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
     location ~* ^/web/ {
        #转发时去掉/web
        rewrite ^/web/(.*) /$1 break; 
        root   html;
        # 配置一下index的地址
        index  index.html index.htm index.jsp index.ftl;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上
        proxy_pass http://web_server;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

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

测试:

正常情况下,访问http://192.168.213.4/web/index.html
在这里插入图片描述
关闭
192.168.213.6后测试,只能访问到192.168.213.5。
关闭命令:

 systemctl stop nginx

在这里插入图片描述
3、资源压缩

在Nginx提供了三个支持资源压缩的模块ngx_http_gzip_module、ngx_http_gzip_static_module、ngx_http_gunzip_module,其中ngx_http_gzip_module属于内置模块,代表着可以直接使用该模块下的一些压缩指令,后续的资源压缩操作都基于该模块,先来看看压缩配置的一些参数/指令:

参数项释义参数值
gzip开启或关闭压缩机制on/off;
gzip_types根据文件类型选择性开启压缩机制image/png、text/css…
gzip_comp_level用于设置压缩级别,级别越高越耗时 1~9(越高压缩效果越好)
gzip_vary设置是否携带Vary:Accept-Encoding头域的响应头部on/off
gzip_buffers设置处理压缩请求的缓冲区数量和大小 数量 大小如16 8k
gzip_disable针对不同客户端的请求来设置是否开启压缩如 .Chrome.
gzip_http_version指定压缩响应所需要的最低HTTP请求版本如1.1
gzip_min_length设置触发压缩的文件最低大小如512k;
gzip_proxied对于后端服务器的响应结果是否开启压缩off、expired、no-cache…

了解了Nginx中的基本压缩配置后,接下来可以在Nginx中简单配置一下:

http{
    # 开启压缩机制
    gzip on;
    # 指定会被压缩的文件类型(也可自己配置其他类型)
    gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
    # 设置压缩级别,越高资源消耗越大,但压缩效果越好
    gzip_comp_level 5;
    # 在头部中添加Vary: Accept-Encoding(建议开启)
    gzip_vary on;
    # 处理压缩请求的缓冲区数量和大小
    gzip_buffers 16 8k;
    # 对于不支持压缩功能的客户端请求不开启压缩机制
    gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩
    # 设置压缩响应所支持的HTTP最低版本
    gzip_http_version 1.1;
    # 设置触发压缩的最小阈值
    gzip_min_length 2k;
    # 关闭对后端服务器的响应结果进行压缩
    gzip_proxied off;
}

在上述的压缩配置中,最后一个gzip_proxied选项,可以根据系统的实际情况决定,总共存在多种选项:

  • off:关闭Nginx对后台服务器的响应结果进行压缩。
  • expired:如果响应头中包含Expires信息,则开启压缩。
  • no-cache:如果响应头中包含Cache-Control:no-cache信息,则开启压缩。
  • no-store:如果响应头中包含Cache-Control:no-store信息,则开启压缩。
  • private:如果响应头中包含Cache-Control:private信息,则开启压缩。
  • no_last_modified:如果响应头中不包含Last-Modified信息,则开启压缩。
  • no_etag:如果响应头中不包含ETag信息,则开启压缩。
  • auth:如果响应头中包含Authorization信息,则开启压缩。
  • any:无条件对后端的响应结果开启压缩机制。

4、IP黑白名单
Nginx做黑白名单机制,主要是通过allow、deny配置项来实现:

allow xxx.xxx.xxx.xxx; # 允许指定的IP访问,可以用于实现白名单。
deny xxx.xxx.xxx.xxx; # 禁止指定的IP访问,可以用于实现黑名单。

操作的服务器为:192.168.213.4
宿主机IP:192.168.213.2
在这里插入图片描述

白名单演示:

在目录/etc/nginx/conf.d,创建whiteIP.conf白名单配置文件。

allow 192.168.213.2; #允许192.168.213.2访问
deny all;#除开上述IP,其他IP全部禁止访问

重启,测试。
宿主机IP:192.168.213.2
宿主机请求测试
在这里插入图片描述
192.168.213.5请求测试:

 curl http://192.168.213.4/web/index.html

在这里插入图片描述

黑名单配置:

deny 192.168.213.5; # 屏蔽192.168.213.5访问
deny 192.168.213.6; # 屏蔽192.168.213.6访问
deny 127.0.0.0/8; # 屏蔽127.0.0.1到127.255.255.254网段中的所有IP访问

分别将要禁止/开放的IP添加到对应的文件后,可以再将这两个文件在nginx.conf中导入:

http{
    # 屏蔽该文件中的所有IP
    include /soft/nginx/IP/BlocksIP.conf; 
 server{
    location xxx {
        # 某一系列接口只开放给白名单中的IP
        include /soft/nginx/IP/blockip.conf; 
    }
 }
}

5、跨域配置

跨域配置使用的比较多,配置起来也简单。

跨域问题产生的原因:
产生跨域问题的主要原因就在于同源策略,为了保证用户信息安全,防止恶意网站窃取数据,同源策略是必须的,否则cookie可以共享。由于http无状态协议通常会借助cookie来实现有状态的信息记录,例如用户的身份/密码等,因此一旦cookie被共享,那么会导致用户的身份信息被盗取。同源策略主要是指三点相同,协议+域名+端口 相同的两个请求,则可以被看做是同源的,但如果其中任意一点存在不同,则代表是两个不同源的请求,同源策略会限制了不同源之间的资源交互。

location / {
    # 允许跨域的请求,可以自定义变量$http_origin,*表示所有
    add_header 'Access-Control-Allow-Origin' *;
    # 允许携带cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    # 允许跨域请求的方法:GET,POST,OPTIONS,PUT
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
    # 允许请求时携带的头部信息,*表示所有
    add_header 'Access-Control-Allow-Headers' *;
    # 允许发送按段获取资源的请求
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    # 一定要有!!!否则Post请求无法进行跨域!
    # 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        # 对于Options方式的请求返回204,表示接受跨域请求
        return 204;
    }
}

但如果后端是采用分布式架构开发的,有时候RPC调用也需要解决跨域问题,不然也同样会出现无法跨域请求的异常,因此可以在你的后端项目中,通过继承HandlerInterceptorAdapter类、实现WebMvcConfigurer接口、添加@CrossOrgin注解的方式实现接口之间的跨域配置。

6、配置SSL证书
要配置NGINX使用SSL证书,可以按照以下步骤进行操作:

  • 获取SSL证书:首先,需要从权威的SSL证书颁发机构(CA)获取SSL证书。可以选择购买商业证书或使用免费的证书颁发机构(如Let’s Encrypt)。

  • 安装SSL证书:将获得的SSL证书文件(通常包括.crt和.key文件)上传到服务器上。确保将它们放置在安全的位置,并且只有具有适当权限的用户可以访问这些文件。

  • 编辑NGINX配置文件:打开NGINX的配置文件,通常是/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。

  • 添加HTTPS服务器块:在配置文件中找到HTTP服务器块,并在其下方添加一个新的HTTPS服务器块。以下是一个示例配置:

server {  
    listen 80;  
    server_name 192.168.213.4;  
      
    # 将HTTP请求重定向到HTTPS  
    return 301 https://$host$request_uri;  
}  

server {  
    listen 443 ssl;  
    server_name 192.168.213.4;  
  
    ssl_certificate /path/to/your/certificate.crt;  
    ssl_certificate_key /path/to/your/private.key;  
  
    # 可选配置:配置加密套件和其他SSL参数  
    ssl_protocols TLSv1.2 TLSv1.3;  
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';  
    ssl_prefer_server_ciphers on;  
  
    # 其他配置指令...  
}

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

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

相关文章

详解自动化测试之 Selenium

目录 1. 什么是自动化 2.自动化测试的分类 3. selenium(web 自动化测试工具) 1)选择 selenium 的原因 2)环境部署 3)什么是驱动? 4. 一个简单的自动化例子 5.selenium 常用方法 5.1 查找页面元素&…

如何合理估算 Java 线程池大小

前 言 Java 中的线程创建会产生显著的成本。创建线程会消耗时间,增加请求处理的延迟,并且涉及 JVM 和操作系统的大量工作。为了减轻这些开销,线程池发挥了作用。 在本文中,我们将深入研究确定理想线程池大小的艺术。经过微调的线…

【C++】模版-初阶

目录 泛型编程--模版 函数模版 类模版 泛型编程--模版 函数模版 如何实现一个通用的交换函数呢?void Swap(int& left, int& right){int temp left;left right;right temp;}void Swap(double& left, double& right){double temp left;left right;righ…

基于ssm+vue交通事故档案系统

摘要 摘要是对文章、论文或其他文本的主要观点、结论和关键信息的简洁概括。由于你没有提供具体的文章或主题,我将为你创建一个通用的摘要。 本文介绍了一种基于SSM(Spring Spring MVC MyBatis)和Vue.js的交通事故档案管理系统的设计与实现…

设计模式-备忘录模式-笔记

动机(Motivation) 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节…

ROS服务(Service)通信:通信模型、Hello World与拓展

服务通讯是基于请求响应模式的,是一种应答机制。 用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。 一、服务通讯模型 服务是一种双向通讯方式,它通过请求和应答的方式传递消息,该模型涉及到三个角色: Master…

USART(1)

什么是USART 单片机上有的许多的外设 单片机通过这些外设实现特殊的功能 如果单片机想要和蓝牙模块实现数据的传输那么就也需要单片机有串口模块来和蓝牙模块的串口进行连接 相互传输数据 在单片机上的串口就叫USART USART就是单片机上的外设 来实现串口之间的通信功能 USART名…

基于51单片机步进电机节拍步数正反转LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)

基于51单片机步进电机节拍步数正反转LCD1602显示 📑1. 主要功能:📑2. 讲解视频:📑3. 仿真📑4. 程序代码📑5. 设计报告📑6. 设计资料内容清单&&下载链接📑[资料下…

基于SSM的宠物医院管理系统

基于SSM的宠物医院管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 后台 摘要 随着人们对宠物健康关注的增加,宠物医疗服务的需求也…

许战海战略文库|企业竞争优势三大获取路径:产业、品牌和产品竞争优势

在快速发展和变革的全球化市场中,企业面临着持续的竞争压力。要在这种环境中脱颖而出,企业需要建立持久的竞争优势。通常,竞争优势可以从三个主要路径来获取:产业竞争优势、品牌竞争优势和产品竞争优势。 1. 产品竞争优势为什么很…

电子科技大学 分布式系统 期末复习笔记

第一章 为什么需要分布式系统:功能分离,固有的分布性,负载均衡,可靠性,经济性。 定义:分布式系统是这样一种系统,其中位于联网计算机上的组件仅通过传递消息来通信和协调它们的操作。 特点&am…

线性表的概念

目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…

【Vue配置项】 computed计算属性 | watch侦听属性

目录 前言 computed计算属性 什么是计算属性? Vue的原有属性是什么? 得到的全新的属性是什么? 计算属性怎么用? 计算属性的作用是什么? 为什么说代码执行率高了? computed计算属性中的this指向 co…

【Java 进阶篇】JQuery 遍历 —— 无尽可能性的 `each` 之旅

在前端的征途中,操作元素是开发者不可避免的任务之一。而在 JQuery 中,each 方法则是处理这个任务的得力助手。本文将深入探讨 each 方法的奇妙之处,以及它与原生的 for...of 循环的关系,带你领略无尽可能性的遍历之旅。 起步&am…

modbusRTU通信简单实现(使用NModbus4通信库)

本文实现ModbusRTU通信,使用的是NModbus4通信库,使用 Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--Modbus Poll,则是模拟Modbus协议主机的上位机软件…

元宇宙数字展厅无代码编辑工具的功能特点

商场如战场,营销是每个企业都必须重视的环节。随着科技的发展,3D展示营销制作平台作为企业快速搭建3D互动展厅的SaaS平台,逐渐崭露头角,为企业提供了诸多便利,让营销变得更加高效和引人入胜。 为企业提供身临其境的产品…

【EI会议征稿】第五届人工智能与机电自动化国际学术会议(AIEA 2024)

第五届人工智能与机电自动化国际学术会议(AIEA 2024) 2024 5th International Conference on Artificial Intelligence and Electromechanical Automation 第五届人工智能与机电自动化国际学术会议(AIEA 2024)将于2024年3月8-10…

算法竞赛备赛进阶之状态机模型训练

目录 1.大盗阿福 2.股票买卖IV 3.股票买卖V 4.设计密码 算法状态机(ASM)图是一种描述时序数字系统控制过程的算法流程图,其结构形式类似于计算机中的程序流程图。 ASM图是用一些特定符号按规定的连接方式来描述数字系统的功能。应用ASM图…

基于JavaWeb+SSM+购物系统微信小程序的设计和实现

基于JavaWebSSM购物系统微信小程序的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 第一章 绪 论 1.1选题背景 互联网是人类的基本需求,特别是在现代社会,…

信号的机制——信号处理函数的注册

在 Linux 操作系统中,为了响应各种各样的事件,也是定义了非常多的信号。我们可以通过 kill -l 命令,查看所有的信号。 # kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS …