本文将在Centos系统下详解Nginx服务器,从概念、下载、安装、编译、配置(含域名和证书)到启动。本文先讲Nginx如何使用,然后再谈概念。
一、实践
1. 下载
- 下载通常有2种方式:Centos自带的包管理工具、源码编译安装(推荐,拓展性强),本文使用源码编译安装的形式下载
- 从Nginx官网(
nginx.org
)下载Nginx的源代码。亦可以使用wget命令或者浏览器下载后通过FTP等方式传输到服务器上wget http://nginx.org/download/nginx-latest.tar.gztar zxvf nginx-latest.tar.gzcd nginx-x.y.z # 替换为下载的版本号
- 解压后的目录主要组成如下(如果下载的是nginx-1.24.2.tar.gz,解压后将得到一个名为nginx-1.24.2的目录): - auto/:包含配置脚本和检测脚本,用于在编译之前自动检测系统的配置和已安装的库。- conf/:包含Nginx的默认配置文件模板,如nginx.conf和koi-utf、koi-win、mime.types等文件。- contrib/:包含一些可选的补丁和工具,用于增强Nginx的功能。- html/:包含Nginx默认的HTML页面,如index.html和50x.html错误页面。- man/:包含Nginx的man手册页,提供Nginx命令和配置的详细文档。- src/:包含Nginx的源代码文件,这是编译Nginx时最核心的部分。- configure:一个脚本,用于配置Nginx的编译选项。运行此脚本后,它会检查你的系统环境,并创建一个Makefile文件,该文件包含了编译Nginx所需的命令和选项。
- 插一点课外知识:wget和yum(centos中最常用的包管理工具,还有RPM、DNF、APT等) - 功能:wget主要用于下载文件,而yum则用于软件包管理。- 使用场景:wget适用于需要下载文件或网页内容的场景;yum则适用于需要安装、更新或删除软件包的场景。- 依赖关系:wget下载文件时不涉及依赖关系问题;yum在安装软件包时会自动处理依赖关系。- 协议支持:wget支持HTTP、HTTPS和FTP协议;yum主要用于处理RPM包,但背后的软件源可能支持多种协议来下载软件包。
2. 安装依赖项
- 根据你的Linux发行版,安装Nginx编译所需的依赖项。例如,在基于Debian的系统上,你可以使用apt-get;在基于Red Hat的系统上,使用yum或dnf。
# Debian/Ubuntusudoapt-get updatesudoapt-getinstall build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev# CentOS/RHELsudo yum install gcc pcre-devel zlib-devel openssl-devel
- 依赖项介绍- GCC(GNU Compiler Collection) - 作用:GCC是GNU项目的编译器套件,nginx的源码是用C语言编写的,因此需要GCC来编译这些源码。- 安装命令:在CentOS中,可以使用yum包管理器来安装GCC。命令如下:
yum install-y gcc gcc-c++
- PCRE(Perl Compatible Regular Expressions) - 作用:PCRE是一个Perl兼容的正则表达式库,nginx的HTTP模块使用PCRE来解析正则表达式,比如location指令中的正则表达式匹配。- 安装命令:同样使用yum包管理器安装PCRE及其开发库。命令如下:yum install-y pcre pcre-devel
- zlib - 作用:zlib是一个广泛使用的数据压缩库,nginx使用zlib对HTTP包的内容进行gzip压缩,以减少网络传输量。- 安装命令:通过yum安装zlib及其开发库。命令如下:yum install-y zlib zlib-devel
- OpenSSL - 作用:OpenSSL是一个强大的安全套接字层密码库,提供了SSL和TLS协议的实现。nginx支持HTTPS协议,因此需要OpenSSL来处理SSL/TLS加密。- 安装命令:使用yum安装OpenSSL及其开发库。命令如下:yum install-y openssl openssl-devel
3. 配置、编译和安装Nginx
- 在编译之前,可以通过./configure脚本配置Nginx的编译选项。这包括指定安装目录、启用SSL支持等。注意此时应该在nginx解压后的源码目录中,存在configure可执行命令。
./configure \--prefix=/usr/local/nginx # 指定新的Nginx安装目录 --with-http_ssl_module \# 启用SSL支持#--with-openssl=/path/to/openssl # 如果系统没有默认安装openssl或需要特定版本,可以指定openssl路径# 其他需要的编译选项...
- 此例中安装到
/usr/local/nginx
目录下。 - 注意:./configure --help命令可以查看所有可用的编译选项。
- 继续执行
make
,此步骤将生成Nginx的可执行文件和其他必要的文件,这些文件将被放置在源代码目录的objs子目录中。make
- 继续执行
make install
命令将Nginx安装到之前指定的目录:makeinstall
- 编译安装后,Nginx的工作目录
/usr/local/nginx
(即–prefix指定的目录)将包含以下主要子目录和文件:- conf:包含Nginx的配置文件,主要是nginx.conf。- html:包含Nginx默认的HTML文件,如index.html和50x.html。- logs:用于存放Nginx的日志文件,如访问日志和错误日志。- sbin:包含Nginx的可执行文件nginx。
4. 配置Nginx域名、SSL等
- 需要先申请域名和证书,通常可以去指定的机构网站申请,或者直接在腾讯等云服务器中申请。
- 编辑Nginx的配置文件(通常位于–prefix指定的目录下的conf子目录中),此例中为
/usr/local/nginx/conf/nginx.conf
。 - 默认的配置文件长这样(加了注释)
# 设定运行Nginx的用户user nginx;# 根据系统CPU数量自动设置工作进程数worker_processes auto;# 错误日志的路径error_log /var/log/nginx/error.log;# PID文件的路径pid /run/nginx.pid;events {# 每个工作进程允许的最大并发连接数 worker_connections 1024;}http {# 引入MIME类型配置文件 include mime.types;# /usr/local/nginx/conf/mime.types# 默认的MIME类型 default_type application/octet-stream;# 定义日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 访问日志的路径和格式 access_log /var/log/nginx/access.log main;# 开启sendfile模式,以减少磁盘I/O sendfile on;# 注释掉的tcp_nopush通常与sendfile一起使用,但在某些情况下可能不需要#tcp_nopush on;# 长连接超时时间 keepalive_timeout 65;# 注释掉的gzip压缩,可以根据需要开启#gzip on;# 引入目录下所有的.conf文件 include /usr/local/nginx/conf.d/*.conf;# 默认的server配置 server {# 监听80端口,作为默认服务器 listen 80 default_server;# 监听IPv6的80端口,作为默认服务器 listen [::]:80 default_server;# 服务器名,这里使用_作为占位符 server_name _;# 根目录的路径 root /usr/share/nginx/html;# 引入目录下所有的.conf文件 include /usr/local/nginx/conf.d/*.conf;# 匹配所有请求 location / {# 这里可以添加处理请求的配置,例如代理、重定向等# 当前为空,使用Nginx默认行为}# 404错误页面的配置 error_page 404 /404.html;# 精确匹配/404.html的请求 location = /404.html {# 这里也可以添加额外的配置,但当前为空}# 500、502、503、504错误页面的配置 error_page 500502503504 /50x.html;# 精确匹配/50x.html的请求 location = /50x.html {# 同样,这里也可以添加额外的配置,但当前为空}}}
- 在http模块下添加如下
server
块server { listen 443 ssl; server_name xxx.com www.xxx.com; # 替换为你的域名,前面不要加http或https,可配置多个域名(一级、二级、三级) ssl_certificate /etc/nginx/ssl/yourdomain.crt; # 证书文件路径 ssl_certificate_key /etc/nginx/ssl/yourdomain.key; # 私钥文件路径 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 其他配置... location / { # 根目录或代理设置... }}# 如果需要,也可以添加一个将HTTP重定向到HTTPS的配置server { listen 80; server_name xxx.com; return 301 https://$server_name$request_uri;}
5. 运行
- 确保在nginx的安装目录, 此例中为
/usr/local/nginx/
,注意不是nginx的源码目录。/usr/local/nginx/sbin/nginx
- 查看是否已启动。
nginx -V
- 注意:-V(大写V)是用于显示Nginx的版本信息和编译参数,而-v(小写v)仅显示Nginx的版本号。
6. 监控
- 创建软连接以便随处可以执行
nginx
命令。sudoln-s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
- 使用Nginx的命令行工具(如nginx、nginx -s reload、nginx -s stop等)来管理Nginx服务的启动、停止和重新加载配置。
- ps命令用于显示当前系统中的活动进程。要查找Nginx进程,可以使用grep命令来过滤输出。
ps aux |grep nginx
- 如果知道Nginx正在监听哪个端口(通常是80或443),可以使用netstat或ss命令来检查哪个进程正在监听该端口。
netstat-tulnp|grep :80
二、理论
1. 概念
- Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发,并以类BSD许可证的形式发布其源代码。Nginx因其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
2. 特性
- 高性能:Nginx采用高效的异步事件驱动模型,使得其能够处理大量的并发连接,并且在高负载环境下依然能够保持高性能。
- 高可靠性:Nginx具有强大的错误处理机制,能够确保在出现错误时依然能够正常提供服务。
- 模块化设计:Nginx的模块化设计使得其具有良好的扩展性,可以方便地添加或移除功能模块。
- 低内存消耗:Nginx在运行时占用的内存资源相对较少,这对于资源有限的服务器环境来说尤为重要。
- 热部署:Nginx支持在不中断服务的情况下进行配置文件的修改和版本升级。
3. 功能
- 静态文件服务:Nginx可以作为静态文件服务器,高效地处理图片、CSS、JavaScript等静态资源的请求。
- 反向代理:Nginx可以作为反向代理服务器,将客户端的请求转发到后端的Web服务器上,同时提供负载均衡、缓存等功能。
- 负载均衡:Nginx支持多种负载均衡算法,如轮询、权重等,能够将客户端的请求分发到多个后端服务器上,提高系统的整体性能和可靠性。
- 邮件代理:Nginx还提供了IMAP/POP3/SMTP代理服务,可以作为邮件服务器的代理服务器。
4. 应用场景
- Web服务器:Nginx可以作为独立的Web服务器,处理HTTP和HTTPS协议的请求。
- 反向代理和负载均衡:Nginx可以作为反向代理服务器,将客户端的请求转发到后端的Web服务器上,并提供负载均衡功能。
- 动静分离:在企业应用中,Nginx常用于动静分离,将静态资源(如图片、CSS、JavaScript等)和动态资源(如JSP、PHP页面等)分开处理,以提高系统的响应速度和性能。
- HTTPS加速:Nginx支持SSL/TLS协议,可以用于HTTPS的加速和优化。
本文转载自: https://blog.csdn.net/qq_52011411/article/details/141604647
版权归原作者 千层冷面 所有, 如有侵权,请联系我们删除。
版权归原作者 千层冷面 所有, 如有侵权,请联系我们删除。