nginx服务介绍

Nginx是一个高性能的Web服务器和反向代理服务器,它最初是为了处理大量并发连接而设计的。Nginx还可以用作负载均衡器、邮件代理服务器和HTTP缓存。它以其轻量级、稳定性和高吞吐量而闻名,广泛用于大型网站和应用中

  • Nginx的核心功能:

    • 静态文件服务:Nginx能够高效地提供静态内容,比如HTML文件、图像和CSS/JS文件。
    • 反向代理:Nginx可以作为反向代理服务器,将客户端请求转发到后端服务器,并将后端服务器的响应返回给客户端。它还支持负载均衡。
    • 负载均衡:Nginx支持多种负载均衡算法,如轮询(Round-robin)、最小连接(Least Connections)和IP哈希(IP Hash)。
    • HTTP缓存:Nginx可以缓存后端服务器的响应,减少服务器的压力并加快响应速度。
    • SSL/TLS终结:Nginx能够处理HTTPS请求,通过SSL/TLS加密保护数据传输。
  • Nginx的架构特点:

    • 事件驱动架构:与传统的进程/线程模型不同,Nginx使用异步、事件驱动架构,能够处理成千上万的并发连接而占用的资源很少。
    • 模块化设计:Nginx支持多种模块,例如HTTP模块、Mail模块等。你可以通过配置启用或禁用不同的功能。
    • 高并发:Nginx可以轻松处理数十万并发连接,适合大规模、高流量的场景。

Nginx的基本配置:

Nginx的配置文件通常位于 /etc/nginx/nginx.conf,这是主配置文件。配置文件通过块和指令来定义行为。常见的配置块包括:

http{}:配置HTTP服务的全局设置,如日志格式、默认字符集等。

server{}:每个server块定义一个虚拟主机(virtual host),包括域名、监听端口、站点根目录等。

location{}:location块用于匹配和处理特定的URL请求路径,可以指定不同的处理方式,比如静态文件的存放位置、反向代理设置等。

配置目录说明

  • /etc/nginx/nginx.conf:主配置文件,Nginx全局设置。
  • /etc/nginx/sites-available/:存放站点(虚拟主机)的配置文件。
  • /etc/nginx/sites-enabled/:存放启用的站点配置文件的符号链接。
  • /etc/nginx/conf.d/:存放全局的自定义配置文件。
  • /etc/nginx/snippets/:存放可复用的配置片段。
  • /var/log/nginx/:存放Nginx的日志文件。
  • /etc/nginx/mime.types:定义MIME类型映射的文件。
  • /etc/nginx/modules-enabled/:存放启用的Nginx动态模块配置文件。

安装使用

nginx命令手册

启动Nginx服务:

sudo systemctl start nginx

停止Nginx服务:

sudo systemctl stop nginx

完全重启Nginx服务,这会关闭并重新启动所有Nginx进程:

sudo systemctl restart nginx

修改了Nginx的配置文件后,可以通过重新加载来应用新的配置,而无需中断服务:

sudo systemctl reload nginx

在重新加载或重启Nginx之前,可以通过以下命令检查配置文件是否有语法错误:

sudo nginx -t

查看Nginx服务的运行状态:

sudo systemctl status nginx

确保Nginx在系统启动时自动运行:

sudo systemctl enable nginx

禁用Nginx的开机自启动:

sudo systemctl disable nginx

如果日志文件被移动或清除,重新打开日志文件:

sudo nginx -s reopen

优雅停止Nginx,允许当前处理的请求完成后再停止服务:

sudo nginx -s quit

强制立即停止Nginx,不等待请求完成:

sudo nginx -s stop

查看当前安装的Nginx版本:

nginx -v

配置静态web服务器

Ubuntu2404环境下安装使用

apt install -y nginx

开机自启动

systemctl enable --now nginx

创建静态文件目录

mkdir -p /var/www/html

创建一个简单的HTML文件

vi /var/www/html/index.html
<!DOCTYPE html>
<html>
<head>
    <title>Welcome to Nginx</title>
</head>
<body>
    <h1>Hello, this is a static file served by Nginx!</h1>
</body>
</html>

编辑Nginx配置文件;Nginx监听80端口,根路径指向 /var/www/html 目录中的文件。当访问localhost时,Nginx会返回/var/www/html目录下的 index.html 文件

vi /etc/nginx/sites-available/default
server {
    listen 80;
    server_name localhost;

    location / {
        root /var/www/html;
        index index.html;
    }

    # 配置一个日志目录(可选)
    access_log /var/log/nginx/static_access.log;
    error_log /var/log/nginx/static_error.log;
}

配置参数详解

  • server 块
    server 块用于定义一个虚拟主机的配置。一个Nginx实例可以包含多个 server 块,每个块处理不同的域名或不同的请求。

  • listen 指令
    定义Nginx监听的IP地址和端口号。
    listen 80 default_server;: 监听IPv4的80端口,并将此服务器块设为默认服务器。当没有其他服务器块匹配请求时,默认服务器将处理请求。

  • root 指令
    指定网站的根目录,即Nginx提供静态文件的基础路径。所有相对路径的文件请求将基于这个目录进行查找

  • index 指令
    定义默认的首页文件。当用户访问网站根目录或目录时,Nginx会按顺序查找这些文件并返回第一个存在的文件

  • server_name 指令
    指定此服务器块响应的域名或主机名。
    _: 通配符,表示所有未被其他 server 块匹配的请求都会由此处理。常用于默认服务器。

  • location 块
    定义如何处理特定的URI请求。可以基于路径、正则表达式等进行匹配和处理
    location / { … }: 匹配所有以 / 开头的请求,即所有请求。
    try_files $uri $uri/ =404;: 尝试按顺序查找请求的文件:
    $uri: 请求的URI对应的文件。
    $uri/: 请求的URI对应的目录。
    =404: 如果前两者都不存在,返回404错误。

检查Nginx配置是否正确

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

重新加载Nginx

sudo systemctl reload nginx

界面访问

在这里插入图片描述

配置nginx正向代理

正向代理(Forward Proxy)是一种网络代理模式,代理服务器位于客户端和目标服务器之间,代表客户端向目标服务器发送请求,并将目标服务器的响应返回给客户端。客户端通过正向代理间接访问目标服务器。

正向代理的工作原理

  • 客户端的请求
    客户端(如浏览器或其他程序)将目标地址(如 www.example.com)的请求发送给代理服务器,而不是直接发送到目标服务器。

  • 代理服务器的处理
    代理服务器接收到请求后,将目标地址作为它自己的请求目标。
    将代理请求发送到目标服务器。

  • 目标服务器的响应
    目标服务器处理代理服务器发来的请求。
    返回响应内容到代理服务器。

  • 代理服务器的返回
    代理服务器将目标服务器的响应转发回客户端。

正向代理的典型用途

  1. 突破网络限制
    正向代理可以绕过防火墙或访问限制,让客户端访问原本无法直接访问的资源。例如,通过正向代理访问被地理位置限制的网站。
  2. 隐藏客户端身份
    使用正向代理,目标服务器只能看到代理服务器的 IP 地址,而看不到客户端的真实 IP 地址,从而保护客户端的隐私。
  3. 缓存加速
    代理服务器可以缓存目标服务器的内容。对于重复请求,直接从缓存中返回结果,从而提高访问速度并减少目标服务器的负载。
  4. 访问控制与过滤
    管理员可以通过正向代理实现对客户端访问的控制。例如,限制某些客户端访问特定类型的网站或资源。
  5. 记录和分析请求
    代理服务器可以记录客户端的访问请求,用于日志分析、安全审计等目的。

实验环境如下

主机IP
nginx服务器(Ubuntu2404)192.168.200.160
客户端(centos7)192.168.200.100

安装nginx

apt install -y nginx

编辑配置文件

vi /etc/nginx/sites-available/default
server {
    listen 8080;  # 监听端口,可以根据需要更改

    resolver 8.8.8.8 8.8.4.4 valid=300s;  # 配置 DNS 解析器
    resolver_timeout 5s;

    location / {
        proxy_pass http://$http_host$request_uri;  # 转发请求
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffers 8 16k;
        proxy_buffer_size 32k;

        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }

    # 配置 HTTPS 支持
    location /https/ {
        proxy_pass https://$http_host$request_uri;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}
  • 检查配置文件
root@huhy:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  • 重启nginx
systemctl restart nginx

客户端配置

  • 测试nginx是否可达
yum install -y telnet
[root@localhost ~]# telnet 192.168.200.160 8080
Trying 192.168.200.160...
Connected to 192.168.200.160.
Escape character is '^]'.
  • 通过环境变量设置编辑全局代理
vi /etc/profile
# 设置 HTTP 代理
export http_proxy="http://192.168.200.160:8080"
# 设置 HTTPS 代理
export https_proxy="http://192.168.200.160:8080"
  • 加载环境变量
source /etc/profile

测试验证:在客户端访问网址

[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com
HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 03:05:16 GMT
Content-Type: text/html
Content-Length: 81
Connection: keep-alive
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 18 Jan 2025 03:05:16 GMT
  • 查看nginx服务器日志:此时由nginx将100地址的请求进行转发给百度
root@huhy:~# tail -f /var/log/nginx/access.log
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.1 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.100 - - [17/Jan/2025:02:55:03 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:02:55:33 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:02:58:57 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:03:05:16 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"

进阶配置:

(1)基于 IP 的访问控制
Nginx 可以限制哪些客户端 IP 可以使用代理

vi /etc/nginx/sites-available/default
---------------------
location / {
    allow 192.168.1.0/24;  # 允许某个网段
    deny all;              # 拒绝其他所有访问
    proxy_pass http://$http_host$request_uri;
--------------
}

(2)基于用户认证的访问控制
为代理添加基本的 HTTP 用户认证:

  • 生成用户认证文件:
apt install -y apache2-utils
  • 创建一个密码文件:会提示输入并确认密码。
root@huhy:~# htpasswd -c /etc/nginx/.htpasswd username
New password:
Re-type new password:
Adding password for user username
root@huhy:~#
  • 修改 Nginx 配置
vi /etc/nginx/sites-available/default
location / {
    auth_basic "Restricted Access";   #添加
    auth_basic_user_file /etc/nginx/.htpasswd;  #添加
    proxy_pass http://$http_host$request_uri;
    ...
}
systemctl restart nginx

客户端测试访问:出现401

[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com
HTTP/1.1 401 Unauthorized
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 05:55:19 GMT
Content-Type: text/html
Content-Length: 188
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted Access"
  • 给出用户名和密码后即可登录
[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com -uusername:000000
HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 05:56:45 GMT
Content-Type: text/html
Content-Length: 81
Connection: keep-alive
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 18 Jan 2025 05:56:45 GMT
root@huhy:~# tail -f /var/log/nginx/access.log
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.1 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.100 - - [17/Jan/2025:02:55:03 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:02:55:33 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:02:58:57 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:03:05:16 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:05:55:19 +0000] "HEAD http://baidu.com/ HTTP/1.1" 401 0 "-" "curl/7.29.0"
192.168.200.100 - username [17/Jan/2025:05:56:45 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
posted @ 2024-09-17 12:58  huhy  阅读(26)  评论(0)    收藏  举报  来源
--> --> /*文章评论*/