2025年4月

官方文档: 从源代码构建Nginx

基于源码,定制编译Nginx,提供了关于源码编译Nginx的示例

  1. 不使用外部模块编译Nginx
  2. 使用外部模块编译Nginx

编译环境

Nginx版本: 1.27.5

操作系统: Ubuntu 18.04

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:        18.04
Codename:       bionic

- 阅读剩余部分 -

计划

1.php服务相关文件。

2.后端使用php-fpm容器启动

3.前端使用本地nginx代理,或者使用容器nginx代理(可不映射php-fpm端口)

php项目目录

/var/www/example/

Index.php文件在该目录

示例

1.使用本地nginx+容器php-fpm服务部署

2.使用容器nginx+容器php-fpm服务部署

- 阅读剩余部分 -

通过 ngx_stream_ssl_preread_module 模块(1.11.5) 实现HTTPS和SSH共用一个端口

根据 $ssl_preread_protocol 变量 判断SSL协议版本,选择上游。使ssh连接到ssh端口,HTTPS连接到https端口

nginx版本必须大于1.15.2,因为 nginx 1.15.2 版本之后新增了一个属性$ssl_preread_protocol,可以让stream区分web ssl/tls和其他协议

流程

1.ssh端口

2.https端口

3.通过stream模块实现四层协议的转发,根据 $ssl_preread_protocol 判断进入ssh还是https端口

- 阅读剩余部分 -

sub_filter 属于 ngx_http_sub_module 模块,不是默认构建的,需要通过 --with-http_sub_module 配置参数启用。

配置示例

        proxy_set_header Accept-Encoding ''; # 清除请求头中的Accept-Encoding,让后端服务器返回未压缩格式
        sub_filter_types *;                  # 替换所有类型
        sub_filter_once off;                 # 查找所有内容替换,而不是只替换一次
        sub_filter 'old_address:8080' 'new_address:8888'; # 示例,将响应中的内容 old_address:8080 替换成 new_address:8888

- 阅读剩余部分 -