Linux系统Nginx服务(二)

一、HTTPS 访问配置(自签名证书)

1.1 SSL 与 TLS 简介

SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,安全传输层协议)是用于保障网络通信安全的协议,主要提供私密性、信息完整性和身份认证。TLS 是 SSL 的升级版,目前广泛应用于 HTTPS 协议中。

1.2 HTTPS 工作流程

  1. 客户端访问 HTTPS 网站(如 https://www.example.com);
  2. 服务器返回 CA 证书(包含公钥);
  3. 浏览器验证证书合法性;
  4. 验证通过后,客户端生成随机数并用公钥加密,发送给服务器;
  5. 服务器用私钥解密获取随机数;
  6. 双方使用该随机数进行对称加密通信。

1.3 自签名证书生成

若无需权威机构认证(如测试环境),可生成自签名证书:

shell

复制代码
# 创建证书存放目录
mkdir /usr/share/nginx/pki/private -p

# 生成私钥(包含公钥和私钥)
cd /usr/share/nginx/pki/private
openssl genrsa -out nginx.key

# 生成证书请求文件(CSR)
cd /usr/share/nginx/
openssl req -new -key ./private/nginx.key -out nginx.csr
# 按提示输入信息(Country、State、Common Name 等,Common Name 建议填域名)

# 生成自签名证书(有效期 3650 天)
openssl x509 -req -days 3650 -in nginx.csr -signkey ./private/nginx.key -out nginx.crt

1.4 Nginx 配置 SSL

nginx.conf 中添加 HTTPS 服务配置:

shell

复制代码
server {
    listen       443 ssl;  # 监听 443 端口并启用 SSL
    server_name  www.jx.com;  # 域名

    # 证书路径
    ssl_certificate      ../pki/nginx/nginx.crt;
    ssl_certificate_key  ../pki/nginx/private/nginx.key;

    # SSL 会话配置
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    # 加密算法配置
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    # 网站根目录与默认页
    location / {
        root   html;
        index  index.html index.htm;
    }
}

1.5 测试

使用 curl 测试 HTTPS 连接(-k 忽略证书验证):

shell

复制代码
curl -k https://192.168.115.111

二、Location 配置

2.1 作用

Location 用于匹配客户端请求的 URI(统一资源标识符),并指定对应的处理规则(如根目录、代理转发等),配置写在 server 块中。

2.2 匹配规则

Location 的语法为:

shell

复制代码
location [ = | ~ | ~* | ^~ ] uri { ... }
  • =:精确匹配(完全一致才匹配);
  • ~:正则匹配,区分大小写;
  • ~*:正则匹配,不区分大小写;
  • ^~:匹配到即停止后续搜索。

2.3 匹配优先级

优先级从高到低为:= > ^~ > ~ > ~* > 不带符号的普通匹配。

2.4 配置案例

shell

复制代码
server {
    listen  80;
    server_name  www.jx.com;

    # 精确匹配:仅匹配 www.jx.com/info.html
    location = /info.html {
        root  /usr/share/nginx/html;
    }

    # 正则匹配:匹配 .jpg/.png 等图片资源
    location ~ \.(jpeg|jpg|png|svg)$ {
        root /usr/share/nginx/html/images;
    }

    # ^~ 匹配:匹配 /bbs/ 路径,且停止后续匹配
    location ^~ /bbs/ {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

2.5 注意事项

  • URI 末尾的 / 影响匹配:/test 优先匹配目录,若无则匹配文件;/test/ 仅匹配目录。

  • return 指令可直接返回状态码或重定向,例如:

    shell

    复制代码
    location /old {
        return 301 https://www.jx.com/new;  # 永久重定向到新地址
    }

三、Rewrite 配置

3.1 作用

Rewrite 用于根据正则表达式规则重写 URL,适用于新老域名更替、路径调整 等场景,可配置在 serverlocationif 块中。

3.2 语法

shell

复制代码
rewrite 正则表达式 目标URL [flag];
  • flag 可选值:
    • last:重写后重新进入 server 块匹配 location;
    • break:重写后停止匹配其他规则;
    • redirect:返回 302 临时重定向;
    • permanent:返回 301 永久重定向。

3.3 配置案例

shell

复制代码
server {
    listen 80;
    server_name www.jx.com;
    root /usr/share/nginx/html;

    # 将 /search 路径重定向到百度
    location /search {
        rewrite ^/(.*) https://www.baidu.com redirect;  # 临时重定向
    }

    # 将 /images/xxx.jpg 重写为 /pics/xxx.jpg
    location /images {
        rewrite /images/(.*) /pics/$1 last;  # 重写后重新匹配 location
    }
}

3.4 反向引用

正则表达式中的分组(())可通过 $1$2 等引用,例如:

shell

复制代码
rewrite ^/user/(\d+)/profile$ /user/profile?id=$1 last;
# 将 /user/123/profile 重写为 /user/profile?id=123
相关推荐
yolo_guo3 小时前
glog使用: 07-错误信号处理(Failure Signal Handler)
linux·c++·glog
维尔切3 小时前
MySQL 主从复制
linux·运维·数据库·mysql·adb
挺6的还3 小时前
38.应用层协议HTTP(一)
linux
三坛海会大神5554 小时前
ZooKeeper详解
运维·zookeeper
小猪写代码4 小时前
Linux-ARM-裸机开发-开发环境搭建
linux·arm开发
小猪写代码4 小时前
Ubuntu vscode软件的安装和使用
linux·vscode·ubuntu
胡斌附体4 小时前
linux docker 数据迁移
linux·docker·存储·迁移·rsync保留权限复制
荣光波比4 小时前
ELK企业级日志分析系统详解:从入门到部署实践
运维·elk·云计算
error:(4 小时前
【Linux命令从入门到精通系列指南】rm 命令详解:安全删除文件与目录的终极实战手册
linux·chrome·安全