云计算百科
云计算领域专业知识百科平台

Linux 运维:Nginx 虚拟主机、HTTPS、反向代理

Nginx 核心知识点总结(CentOS7)

Nginx 高性能Web服务,可实现静态网站、虚拟主机、HTTPS、LNMP动态站点、反向代理。配置层级:全局模块 → events核心模块 → http业务模块,支持include拆分配置文件。

一、基础部署

  • 安装:yum -y install nginx
  • 启动自启:systemctl enable nginx –now
  • 防火墙放行http服务;客户端可修改/etc/hosts做域名本地解析,使用域名访问测试。
  • 二、Nginx配置结构

    1、配置加载规则

    • include 引入外部配置,虚拟主机习惯放到 /etc/nginx/conf.d/*.conf;默认附加配置放在/etc/nginx/default.d/*.conf
    • 优先级:子配置覆盖父配置;同层级后面定义覆盖前面。

    2、四大配置块

  • 全局块(配置文件最外层,不嵌套)
    user运行进程用户;worker_processes auto工作进程;error_log错误日志;pid进程PID文件。
  • events{} 核心连接模块
    worker_connections单进程最大连接数;Linux使用epoll事件模型,优化并发。
  • http{} HTTP业务总块
    存放http公共参数,内部可以包含多个server{}虚拟主机。

    • 公共配置:mime.types、访问日志access_log、sendfile高效文件传输、keepalive_timeout长连接超时。
    • server{}:虚拟主机:listen监听端口;server_name域名;root网站根目录;error_page自定义错误页。
    • location{}:在server内部,匹配URL访问路径,配置首页、代理、转发规则。
  • HTTPS专属server块:listen 443 ssl,配置证书crt公钥、key私钥,ssl加密套件参数。
  • 配置校验:nginx -t;重载配置:nginx -s reload,不中断业务。

    三、虚拟主机

    一台Nginx跑多个独立网站,两种实现方式:

  • 基于域名(name‑based):相同端口80,依靠server_name域名区分不同站点,每个站点设置独立root网页目录。配置文件放到conf.d/vhost‑name.conf。
  • 基于端口(port‑based):同一个域名,依靠listen监听不同端口区分站点。配置文件放到conf.d/vhost‑port.conf。
  • 客户端/etc/hosts解析只写IP+域名,不能携带端口号。

    四、SSL/TLS HTTPS配置

  • 使用openssl生成自签名证书:私钥.key、证书申请.csr、公钥证书.crt;CN项必须填写网站域名。
  • server监听443 ssl,指定证书、私钥路径。
  • 80端口server配置return 301 https://$host$request_uri;实现HTTP永久重定向跳转HTTPS。
  • curl测试:-L跟随重定向,-k跳过证书校验(自签证书测试使用)。
  • 五、LNMP动态网站架构(Linux+Nginx+MySQL+PHP‑FPM)

    静态 vs 动态网站

    项目静态网站动态网站
    原理 直接返回预先写好的html文件,不执行程序,不访问数据库 请求交给后端程序,实时执行代码、查询数据库,拼接生成HTML返回
    交互 只能前端简单动画,无法提交表单存数据 支持登录、注册、搜索、数据增删改查
    依赖 仅Nginx即可 Nginx + PHP‑FPM + MariaDB数据库

    工作流程

  • 用户访问.php页面;Nginx匹配location ~ \\.php$
  • Nginx通过fastcgi_pass转发请求给本地php‑fpm:9000
  • php‑fpm执行PHP代码,读写MariaDB数据库
  • PHP生成HTML网页回传给Nginx,Nginx返回浏览器;浏览器永远看不到PHP源代码。
  • PHP‑FPM部署配置

  • 安装php php‑fpm,修改/etc/php‑fpm.d/www.conf,user、group改为nginx,启动php‑fpm。
  • Nginx配置location ~ \\.php$
    • try_files $uri =404 安全防护,防止恶意路径解析漏洞;
    • fastcgi_pass 127.0.0.1:9000转发php请求;
    • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;传递php脚本绝对路径;
    • include fastcgi_params;导入环境变量。
  • 两种写法:全部写在server内部;或者拆分,把php规则写到/etc/nginx/default.d/php.conf,用include引入。
  • 六、反向代理

    Nginx作为中介,代替客户端访问后端真实服务器,客户端只能看到代理Nginx,不知道后端真实IP。

  • 流程:客户端请求Nginx → location匹配规则 → nginx向后端服务器发起请求 → 获取响应返回客户端。
  • upstream模块:定义后端服务器组,实现基础轮询负载均衡。
  • location匹配优先级(从高到低):
    =精确匹配 > ^~优先前缀匹配 > ~ / ~*正则匹配 > 普通前缀匹配 > /根兜底匹配。
  • proxy_pass 末尾斜杠/ 重点区别
    • 末尾带/:剔除location匹配的路径前缀,转发剩余部分;
    • 末尾不带/:完整拼接location匹配的路径。
  • 反向代理必备请求头:
    Host $host; X‑Real‑IP $remote_addr; X‑Forwarded‑For $proxy_add_x_forwarded_for; X‑Forwarded‑Proto $scheme;
  • 实验验证:精确匹配 > 正则匹配 > 普通前缀匹配。


    补充实操小提示

  • 修改完nginx配置,务必先nginx -t校验语法,再reload,避免服务挂掉;
  • php‑fpm运行用户必须和nginx网页目录权限匹配,否则页面500报错;
  • 自签名证书浏览器会报不安全,仅内部测试使用;生产使用正规CA证书;
  • proxy_pass斜杠细节极易踩坑,区分是否要剔除前缀路径。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux 运维:Nginx 虚拟主机、HTTPS、反向代理
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!