首页 > 系统相关 >Nginx 学习

Nginx 学习

时间:2024-12-26 15:44:45浏览次数:4  
标签:http nginx server 学习 Nginx proxy 服务器 80

Nginx

主要功能:

  • Web 服务器:Nginx 可以作为Web 服务器,接收客户端的 HTTP 请求,根据配置文件中的规则返回相应的网页内容
  • 反向代理:Nginx 可以作为反向代理服务器,位于后端服务器(如应用服务器、数据库服务器等)之前,接收来自客户端的请求,然后将请求转发给后端服务器处理。
  • 负载均衡:Nginx 具备强大的负载均衡功能,能够将客户端的请求均匀地分配到多个后端服务器上,避免单个服务器负载过高。
  • HTTP 缓存:Nginx 可以对 HTTP 请求和响应进行缓存,减少后端服务器的压力,提高网站的响应速度。

一 .安装

1. YUM 安装

yum 源:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
$ yum -y install nginx
$ systemctl enable nginx
$ systemctl start nginx
$ firewall-cmd --permanent --zone=public --add-port=80/tcp
$ firewall-cmd --reload

2. docker 安装

docker run --name mynginx -p 80:80 -d nginx

3. Ansible 安装

  • 安装 Ansible NGINX collection
    ansible-galaxy collection install nginxinc.nginx_core
  • playbook:
---
- hosts: all
  collections:
    - nginxinc.nginx_core
  tasks:
    - name: Install NGINX
      include_role:
        name: nginx
    - name: Configure NGINX
      ansible.builtin.include_role:
        name: nginx_config
      vars:
        nginx_config_http_template_enable: true
        nginx_config_http_template:
          - template_file: http/default.conf.j2
            deployment_location: /etc/nginx/conf.d/default.conf
            config:
              servers:
                - core:
                    listen:
                      - port: 80
                    server_name: localhost
                  log:
                    access:
                      - path: /var/log/nginx/access.log
                        format: main
                  sub_filter:
                    sub_filters:
                      - string: server_hostname
                        replacement: $hostname
                    once: false
                  locations:
                    - location: /
                      core:
                        root: /usr/share/nginx/html
                        index: index.html

 nginx_config_html_demo_template_enable: true
 nginx_config_html_demo_template:
   - template_file: www/index.html.j2
     deployment_location: /usr/share/nginx/html/index.html
     web_server_name: Ansible NGINX collection

  • nginx.conf:
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

l

二 . 负载均衡

Nginx 负载均衡通过 upstream 模块来定义一组后端服务器,并使用 proxy_pass 指令将请求转发到这些服务器

http {
    upstream backend_servers {
        server 192.168.1.100:80;
        server 192.168.1.101:80;
    }

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

负载均衡算法

  • 轮询(默认):每个请求按顺序逐一分配到不同的后端服务器。
  • 加权轮询:根据服务器的性能或权重,按比例分配请求。权重越高,分配到的请求越多。
upstream backend_servers {
    server 192.168.1.100:80 weight=3;
    server 192.168.1.101:80 weight=1;
}
  • IP 哈希:根据客户端的 IP 地址计算哈希值,将相同 IP 地址的请求始终转发到同一台后端服务器。适用于需要保持会话粘性的场景。
upstream backend_servers {
    ip_hash;
    server 192.168.1.100:80;
    server 192.168.1.101:80;
}

三 . 内容缓存

缓存能够存储响应结果,以供未来再次使用,进而加速内容的提供。通过从缓存中提供内容,NGINX 可卸载上游(upstream)服务器的高开销、重复性工作,从而减少其负载。
缓存可以提高性能并减少负载,这意味着您可以用更少的资源更快地提供服务。缓存还能减少提供资源所需的时间和带宽。

     http {
         proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
 
         server {
             listen 80;
             server_name localhost;
 
             location /static/ {
                 proxy_cache my_cache;
                 proxy_cache_valid 200 302 60m;
                 proxy_cache_valid 404 10m;
                 proxy_pass http://backend_servers;
             }
         }
     }

在这个配置中,proxy_cache_path指令定义了缓存的存储路径、层级结构、缓存区名称和大小等参数。location块中的proxy_cache指令指定使用的缓存区名称(这里是my_cache),proxy_cache_valid指令设置了不同 HTTP 状态码的缓存有效期。对于状态码为 200 和 302 的响应,缓存有效期为 60 分钟;对于状态码为 404 的响应,缓存有效期为 10 分钟。proxy_pass指令将请求转发到后端服务器。

四. 安全配置

访问配置

Nginx 可以通过配置来限制对特定资源的访问。可以基于 IP 地址、用户身份验证等方式进行访问控制。例如,只允许特定 IP 地址段的客户端访问服务器:

     server {
         listen 80;
         server_name localhost;
 
         location /admin/ {
             allow 192.168.1.0/24;
             deny all;
             proxy_pass http://backend_servers;
         }
     }

location /admin/块中,allow指令允许192.168.1.0/24网段的 IP 地址访问,deny all拒绝其他所有 IP 地址的访问。然后将请求转发到后端服务器。

https配置

listen 443 ssl指定服务器监听 443 端口并启用 SSL。ssl_certificate和ssl_certificate_key指令分别指定了 SSL 证书和私钥的路径。

     server {
         listen 443 ssl;
         server_name localhost;
 
         ssl_certificate /etc/nginx/ssl/certificate.crt;
         ssl_certificate_key /etc/nginx/ssl/private.key;
 
         location / {
             root /usr/share/nginx/html;
             index index.html index.htm;
         }
     }

五. API网关

 http {  
    # 定义一个或多个upstream块,用于配置后端服务器组  
    upstream backend_servers {  
        server backend1.example.com;  
        server backend2.example.com;  
    }  
  
    server {  
        listen 80; # 监听80端口  
        server_name api.example.com; # 设置你的API网关域名  
  
        # 配置SSL(如果需要HTTPS)  
        # ssl_certificate /path/to/cert.pem;  
        # ssl_certificate_key /path/to/cert.key;  
  
        # 定义不同的location块,用于匹配不同的API路径  
        location /api/v1/video/ {  
            proxy_pass http://video_service; # 假设你有一个视频服务的upstream  
            proxy_http_version 1.1;  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        }  
  
        location /api/v1/homework/ {  
            proxy_pass http://homework_service; # 假设你有一个作业服务的upstream  
            # 其他代理设置...  
        }  
  
        # 可以继续添加其他location块以匹配更多API路径  
  
        # 其他server块配置...  
    }  
  
    # 其他http块配置...  
  
    # 定义其他upstream块,如video_service、homework_service等  
    upstream video_service {  
        server video1.example.com:8080;  
        server video2.example.com:8080;  
    }  
  
    upstream homework_service {  
        server homework1.example.com:8080;  
        server homework2.example.com:8080;  
    }  
  
    # ... 其他upstream定义  
}

参考: Nginx配置最全详解(万字图文总结)

标签:http,nginx,server,学习,Nginx,proxy,服务器,80
From: https://www.cnblogs.com/jinnandu/p/18627974

相关文章

  • 斯坦福大学神经科学家深度揭秘:成人学习途中的残酷真相
    编辑:念小艺背景:本周,我的朋友Teresa将参加一项考试,以正式认证作为一名流利的希腊语使用者。尽管她在一个讲希腊语的国家生活多年,但仍然感到紧张,担心自己无法通过考试。为什么学习一门外语如此困难?大脑到底出了什么问题?最近,斯坦福大学神经科学家安德鲁·霍伯曼(AndrewHuber......
  • 学习threejs,THREE.RingGeometry 二维平面圆环几何体
    ......
  • AIGC | 有手就行的AI绘画教程!全程干货,速来学习!
    AI绘画工具的出现,让设计岗的同事更会画画了,还让策划/制片/三维/后期/运营……也能“画”一画了。今天小源就教一教大伙,萌新小白都能迅速上手的_AI绘画教程_,从零开始,产出你画不出来的“画”!AI绘画,即利用人工智能进行绘画,是人工智能生成内容的典型应用场景之一。其大概......
  • 2025最全大数据工程师学习路线(建议收藏)
      找工作、写论文、项目实训以及实战项目课程学习私信我哟【不要错过文末彩蛋】申明:本文旨在为【大数据自学者|大数据专业学生|工资低的程序员(Java/Python等)】提供一个从入门到入职的的大数据技术学习路径,不适合5年以上大数据工程师的进阶学习。前言:一、个人介绍二、......
  • vue学习(一)
    一、谈谈你对vue的理解1 jquery是命令式   vue是声明式框架2.vue借鉴了mvvm的思想 3. vue采用虚拟DOM传统更新页面,拼接一个完整的字符串innerHTML全部重新渲染。添加虚拟DOM后,可以比较新旧虚拟节点(diff算法),找到变化再进行更新。虚拟DOM就是一个对象,用来描述真实DO......
  • 人工智能学习和就业的那些痛点:你也曾经历过吗?
    导语人工智能(AI)作为热门领域,吸引了众多学生投入学习,但在学习和就业过程中却面临诸多挑战:网上资料太多,不知道如何选择?安装环境被卡住,学习进度停滞?不清楚学习方向,浪费了大量时间?就业方向迷茫,不知道自己适合什么岗位?本文将深入探讨这些痛点,并提供解决思路,助您少走弯路......
  • 大数据学习之Redis 缓存数据库二,Scala分布式语言一
    一.Redis缓存数据库二26.Redis数据安全_AOF持久化机制27.Redis数据安全_企业中该如何选择持久化机制28.Redis集群_主从复制概念29.Redis集群_主从复制搭建30.Redis集群_主从复制原理剖析31.Redis集群_哨兵监控概述32.Redis集群_配置哨兵监控33......
  • 零基础自学人工智能路线规划(附快速学习路线图)
    每一波浪潮的到来,都意味一片无人占领的蓝海,也意味着众多新成长起来的巨头,还意味着什么?大量的技术人员需求,供不应求的开发市场,以及从业者的高薪与众多的机会。我们最常做的事情是目送着上一次浪潮的余波远去,感叹自己生不逢时,却没有意识到,下一波浪潮已经到了我们脚下。没错,......
  • 基本数据结构——算法学习(三)上
    数据结构——算法学习(三)上前言数据结构是计算机科学的基石,几乎所有的软件开发、算法设计都离不开对数据的组织与管理。它不仅是程序高效运行的保障,也是解决复杂问题的关键工具。学习数据结构的过程,不仅仅是掌握具体的知识点,更是培养逻辑思维能力和问题解决能力的重要途径。在......
  • Nginx使用手册
    由于格式和图片解析问题,为了更好的体验可前往阅读原文Nginx(发音为"engine-x")是一个高性能、开源的HTTP和反向代理服务器,也可以作为电子邮件(IMAP/POP3)代理服务器、以及通用的TCP/UDP代理服务器。它由俄罗斯的程序员IgorSysoev创建于2002年,其目的是解决C10K问题(即可以同时处理......