Ubuntu Nginx编译安装及部署配置 - anech

Ubuntu Nginx编译安装及部署配置 - anech

💡 原文中文,约15400字,阅读约需37分钟。
📝

内容提要

本文介绍Ubuntu下Nginx源码编译安装与优化:安装PCRE、zlib、OpenSSL等依赖,下载解压后修改版本号与Server头信息,configure编译安装并配置systemd服务;随后关闭版本信息、设置用户、优化进程与事件模型、开启GZIP、配置代理、HTTPS、限流及系统内核参数,并用脚本按天分割日志。

🔎

延伸解读

编译前依赖库的作用与选择

文章指出,PCRE库用于支持正则表达式,若nginx.conf中使用正则,则编译时必须包含PCRE;zlib库用于GZIP压缩,若配置gzip on,则需编译zlib;OpenSSL用于HTTPS及MD5、SHA1等散列函数。因此,在编译前应根据实际需求安装这些依赖,避免功能缺失。

版本分支的选择建议

文章将Nginx版本分为mainline、stable和legacy:mainline版本号中间数字为奇数,更新快但稳定性稍差;stable版本中间数字为偶数,经过长时间测试,适合商业化环境;legacy为遗留老版本。用户应根据稳定性和功能需求选择,生产环境建议使用stable版本。

隐藏版本信息时的配置冲突

文章提到,通过修改源码可以自定义Server头信息,但若在nginx.conf中设置server_tokens off,Nginx会将整个Server头替换为“Server: nginx”,导致源码修改失效。作者指出目前未找到好的解决办法,建议要么只关闭版本信息而不修改Server头,要么设置server_tokens on使修改生效,二者选一。

性能与安全优化要点

文章介绍了多项优化配置:设置worker_processes auto和worker_cpu_affinity auto以利用多核;调整worker_priority和worker_rlimit_nofile;启用sendfile、tcp_nopush和tcp_nodelay;开启GZIP压缩并设置压缩级别和类型;配置HTTPS会话缓存和超时;使用limit_req_zone进行限流;添加X-Frame-Options等安全头;以及调整系统内核参数如tcp_syncookies和文件描述符限制。

❓

Q&A

在Ubuntu上编译安装Nginx需要安装哪些依赖库?各自有什么作用?

需要安装build-essential、libpcre3、libpcre3-dev、zlib1g、zlib1g-dev、libssl-dev、libgd-dev、libxml2、libxml2-dev、uuid-dev等。PCRE库用于支持正则表达式,zlib库用于gzip压缩,OpenSSL用于支持HTTPS和散列函数。

如何修改Nginx源码以隐藏版本号和Server头信息?

编辑src/core/nginx.h修改NGINX_VERSION和NGINX_VER;编辑src/http/ngx_http_header_filter_module.c将Server字符串改为None;编辑src/http/ngx_http_special_response.c删除错误页中的版本信息。

Nginx的configure编译参数中--prefix和--with-http_ssl_module分别代表什么?

--prefix指定Nginx的安装路径;--with-http_ssl_module启用HTTPS支持模块。

如何为Nginx创建systemd服务文件并管理其启动、停止和重启?

创建/etc/systemd/system/nginx.service文件,写入Unit、Service、Install配置。然后使用systemctl enable/start/stop/restart/status nginx.service进行管理。

Nginx优化配置中如何设置worker进程数和事件处理模型?

设置worker_processes auto; worker_cpu_affinity auto; worker_priority -3; worker_rlimit_nofile 65535; 在events块中设置accept_mutex on; multi_accept on; use epoll; worker_connections 65535;

如何配置Nginx的GZIP压缩以提升传输效率?

在http块中设置gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 4; gzip_types text/plain text/css text/xml application/xml application/xml+rss application/json; gzip_vary on;

Nginx如何配置HTTPS并优化SSL性能?

在server块中配置listen 443 ssl; ssl_certificate和ssl_certificate_key指定证书;优化包括ssl_session_cache shared:SSL:15m; ssl_session_timeout 30m; ssl_prefer_server_ciphers off; 并启用TLSv1.2和TLSv1.3。

如何使用Nginx的limit_req_zone进行限流?

在http块中定义limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; 在location中应用limit_req zone=one burst=5 nodelay; 可设置limit_req_status自定义状态码。

如何配置Nginx日志按天分割并自动清理旧日志?

编写脚本将access.log和error.log重命名并压缩,使用nginx -s reopen重新打开日志,通过crontab定时执行,并设置find命令删除超过30天的.gz文件和超过1天的.log文件。

Nginx系统内核参数优化有哪些关键配置?

在/etc/sysctl.conf中设置net.ipv4.tcp_syncookies=1防SYN攻击,net.ipv4.ip_local_port_range=2000 65000,net.ipv4.tcp_rmem和tcp_wmem调整缓冲区,fs.file-max=65535等,执行sysctl -p生效。

🏷️

标签

➡️

继续阅读