Nginx的编译内容./configure (自己整理)

nginx内容编译

-----------------------------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------

安装目录在/usr/local/nginx

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock --http-client-body-temp-path=/dev/shm//nginx_temp/client_body --http-proxy-temp-path=/dev/shm/nginx_temp/proxy --http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi --user=www --group=www --without-select_module --without-poll_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module --without-http_map_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-pcre

----------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------

 

./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_stub_status_module --with-http_sub_module --with-http_gzip_static_module --with-pcre



# make
# make install

# mkdir /dev/shm/nginx_temp

注:有时会因为pcre编译不过去,需要修改一下 --with-pcre=/usr/local/src/pcre-7.8,前提是已经下载了pcre源码包,并解压,不需要编译pcre
<think>嗯,用户之前问过关于nginx二进制包是否可以放在不同目录下执行的问题,现在又接着问关于编译参数中的--prefix=空值的问题,以及nginx包放在哪里了。我需要先回忆一下之前的回答,确保这次回答保持连贯。 用户这次的疑问是关于在编译时设置--prefix=的情况下,nginx的安装位置。之前我提到过可以通过重新编译配置来优化路径,这里需要详细解释--prefix的作用以及设置为空的影响。 首先,--prefix参数通常指定了nginx的安装根目录,默认是/usr/local/nginx。如果设置为空,可能意味着没有指定安装路径,那么编译后的文件可能不会安装到默认位置,或者需要手动管理。但用户可能实际想知道的是,当使用--prefix=时,执行make install后nginx会被安装到哪里,或者二进制文件的位置如何变化。 需要确认的是,当--prefix被设置为空时,是否会导致安装路径出现问题,或者二进制文件被放在当前目录下。此外,用户可能想知道在这种情况下如何正确部署nginx,避免路径错误。 另外,用户的问题中提到“nginx包放哪里了”,可能是指编译后的二进制文件和其他相关文件的存放位置。需要解释在这种情况下,编译后的文件可能不会自动安装到系统目录,而是保留在编译目录下的objs文件夹中,可能需要手动处理。 还要考虑到用户可能对编译过程不熟悉,需要以简明的方式解释各个参数的作用,特别是--prefix的影响,以及如何通过设置其他路径参数来覆盖默认值,确保nginx可以正确运行在不同目录下。 需要确保回答结构清晰,分步骤说明,可能包括编译后的文件位置、手动安装的方法、以及如何验证配置是否正确。同时要提醒用户注意相对路径和绝对路径的设置,避免常见的错误,比如配置文件中的绝对路径引用导致的问题。 可能还需要补充一些实际操作的例子,比如执行make install后的提示信息,或者如何将必要的文件复制到目标目录,保持目录结构的正确性。此外,强调测试配置的重要性,使用nginx -t来检查路径是否正确,确保日志和临时目录有适当的权限。 最后,总结用户的问题,确保他们理解在设置--prefix=的情况下,nginx的安装位置如何变化,以及如何正确部署和运行,避免出现路径错误。</think>━━━━━━━━━━━━━━━━ **Nginx编译参数 --prefix= 深度解析** ━━━━━━━━━━━━━━━━ ### 🔍 直接结论 ⚙️ **当执行 `./configure --prefix=` 时**: ✅ 编译生成的二进制文件默认存储在 `./objs` 目录 🚫 不会自动安装到系统路径(如 `/usr/local/nginx`) 📦 需要 **手动管理所有依赖文件**(配置/日志/临时文件) ━━━━━━━━ ### 📂 编译后文件分布详解 执行完整编译流程后: ```bash ./configure --prefix= make ``` #### 🔧 关键文件位置 | 文件类型 | 存储路径 | |-------------------|------------------------| | 可执行文件 | `./objs/nginx` | | 临时编译文件 | `./objs` 目录 | | 自动生成的配置 | `./objs/ngx_auto_config.h` | ━━━━━━━━ ### 🚀 两种部署方案 #### 🔧 方案一:手动构建完整环境 ```bash # 创建部署目录结构 mkdir -p /my_nginx/{sbin,conf,logs,modules} # 复制关键文件 cp ./objs/nginx /my_nginx/sbin/ cp ./conf/* /my_nginx/conf/ # 创建必要临时目录 mkdir /my_nginx/{client_body_temp,proxy_temp} ``` #### ⚙️ 方案二:编译时精确控制路径 ```bash ./configure \ --prefix= \ --sbin-path=bin/nginx \ # 自定义二进制路径 --modules-path=modules \ --conf-path=conf/nginx.conf \ --error-log-path=logs/error.log ``` **编译后结构**: ``` 当前目录/ ├── bin/nginx ├── conf/ ├── logs/ └── modules/ ``` ━━━━━━━━ ### 🔍 路径验证技巧 ```bash # 查看二进制文件真实路径 ldd objs/nginx | grep 'nginx' # 检查编译参数 objs/nginx -V 2>&1 | grep 'configure arguments' # 测试配置文件加载 objs/nginx -t -c /my_nginx/conf/nginx.conf ``` ━━━━━━━━ ### ⚠️ 高频问题预警 #### 问题1:启动时报 `open() "/logs/access.log" failed` **原因**:未设置 `--http-log-path` 时默认使用相对路径 **解决方案**: ```bash mkdir -p $(pwd)/logs # 确保当前目录存在logs子目录 ``` #### 问题2:动态模块加载失败 **错误提示**: ``` nginx: [emerg] module "/path/to/module.so" is not binary compatible ``` **解决方法**: ```bash # 编译时指定模块路径 ./configure \ --modules-path=$(pwd)/modules \ --add-module=/path/to/custom_module ``` ━━━━━━━━ ### 💡 高级部署建议 #### 制作便携版Nginx ```bash # 将以下内容保存为 build-portable.sh #!/bin/bash ./configure \ --prefix= \ --with-cc-opt="-static" \ --with-ld-opt="-static" make -j$(nproc) strip objs/nginx ``` **生成结果**: ✅ 完全静态链接的二进制文件(约5MB) ✅ 无外部库依赖 #### 容器化部署配置 ```dockerfile FROM alpine:3.18 COPY objs/nginx /usr/local/bin/ RUN mkdir -p /etc/nginx/conf.d && \ touch /etc/nginx/nginx.conf CMD ["nginx", "-g", "daemon off;"] ``` ━━━━━━━━ **最终结论**:通过 `--prefix=` 参数可实现 Nginx 的 **无根目录约束编译**,但需同步处理配置文件、日志路径、临时文件等资源的定位问题,适合需要定制化部署的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值