Nginx(发音为 "Engine-X")是一个高性能的开源 Web 服务器和反向代理服务器。它最初由 Igor Sysoev 开发,旨在处理大量并发连接,具有高效的资源利用率。Nginx 以其轻量级和高效性在 web 服务和反向代理领域得到了广泛的应用。
高性能和高并发: Nginx 使用事件驱动的异步架构,这使得它能够有效地处理大量的并发连接。与传统的线程或进程模型相比,这种设计在处理高并发请求时更具效率。
反向代理和负载均衡: Nginx 支持反向代理功能,将客户端请求转发到后端服务器。它还具有负载均衡能力,能够将请求分发到多个后端服务器,以优化性能和提高可靠性。
静态文件服务: Nginx 能够高效地提供静态文件(如 HTML、CSS、JavaScript 和图像)。它可以缓存静态文件,进一步提高响应速度。
支持 SSL/TLS: Nginx 可以处理 SSL/TLS 加密,提供安全的 HTTPS 连接。它支持现代加密协议和算法,并能有效地处理 SSL 终端。
模块化: Nginx 具有模块化设计,允许用户根据需要启用或禁用功能。常见模块包括虚拟主机、负载均衡、缓存、压缩和访问控制等。
简洁的配置: Nginx 的配置文件结构清晰且简洁。它使用基于文本的配置文件,易于阅读和管理。配置文件支持包括、继承和层次化结构,使得复杂的配置变得更容易管理。
高可靠性和稳定性: Nginx 被设计为能够处理长时间的运行,而不会出现性能下降或崩溃的情况。它在生产环境中经受住了高负载的考验。
在现代 web 环境中,确保网站的安全性至关重要。使用 HTTPS 加密传输的数据可以保护用户隐私和数据安全。如果你在开发或测试环境中需要配置 HTTPS,可以通过以下步骤在 Linux 系统中安装 Nginx、生成 SSL 证书并将 HTTP 请求重定向到 HTTPS。我们将使用 OpenSSL 或 mkcert 来生成证书。
首先,我们需要在系统上安装 Nginx。不同 Linux 发行版的安装命令有所不同:
bashsudo apt update sudo apt install nginx
bashsudo dnf update sudo dnf install epel-release sudo dnf install nginx
安装完成后,可以使用以下命令启动 Nginx 服务,并设置其在系统启动时自动启动:
bashsudo systemctl start nginx
sudo systemctl enable nginx
在测试环境中,我们可以使用 OpenSSL 或 mkcert 生成自签名证书或本地受信证书。
生成私钥
bashopenssl genrsa -out /path/to/cert.key 2048
生成证书签名请求 (CSR)
bashopenssl req -new -key /path/to/cert.key -out /path/to/cert.csr
生成自签名证书
bashopenssl req -x509 -nodes -days 365 -signkey /path/to/cert.key -in /path/to/cert.csr -out /path/to/cert.crt
安装 mkcert
bashsudo apt install libnss3-tools
wget -O mkcert https://dl.filippo.io/mkcert/latest?for=linux/amd64
chmod +x mkcert
sudo mv mkcert /usr/local/bin/
bashsudo dnf install nss-tool
wget -O mkcert https://dl.filippo.io/mkcert/latest?for=linux/amd64
chmod +x mkcert
sudo mv mkcert /usr/local/bin/
生成根证书和私钥
bashmkcert -install
生成本地证书
bashmkcert IP 127.0.0.1 ::1
这会生成 *.pem
和 *-key.pem
文件。
编辑 Nginx 配置文件,以启用 SSL 并设置 HTTP 到 HTTPS 的重定向。假设你使用的是默认配置文件 /etc/nginx/nginx.conf
,你可以创建或修改 /etc/nginx/conf.d/default.conf
文件来添加 SSL 配置:
nginx# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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 on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; return 301 https://$host$request_uri; # error_page 404 /404.html; # location = /404.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } } # Settings for a TLS enabled server. # server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name _; root /usr/share/nginx/html; # ssl_certificate "/path/to/*.pem"; # 替换成证书路径 ssl_certificate_key "/path/to/*-key.pem"; # 替换成证书路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # error_page 404 /404.html; location = /40x.html { } # error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
在修改了配置文件后,检查 Nginx 配置是否正确:
bashsudo nginx -t
如果没有错误,重新加载 Nginx 配置:
bashsudo systemctl reload nginx
你现在已经成功安装了 Nginx、生成了 SSL 证书,并配置了 HTTP 到 HTTPS 的重定向。通过这些步骤,你可以确保你的 Web 服务器使用加密的 HTTPS 连接,增加了安全性。如果在实际生产环境中使用,建议使用由认证机构签发的证书。
本文作者:DYMripper
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!