Nginx
Nginxnginx- nginx 是一个 HTTP 和反向代理服务器,邮件代理服务器,以及通用的 TCP/UDP 代理服务器
- 开发者Igor Sysoev 和 Nginx, Inc.
- 许可2-Clause BSD License
- 网站请添加网站...
nginx [engine x] 是一个 HTTP 和反向代理服务器,邮件代理服务器,以及通用的 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。长期以来,它一直在许多负载很高的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK 和 Rambler。根据 Netcraft 的数据,nginx 在 2021 年 11 月服务或代理了 22.36% 的最繁忙的网站。以下是一些成功案例:Dropbox、Netflix、Wordpress.com、FastMail.FM。
特性
基本 HTTP 服务器功能
- 提供静态文件和索引文件,自动索引;开放文件描述符缓存;
- 通过缓存加速反向代理;负载均衡和容错能力;
- 加速支持带有 FastCGI、uwsgi、SCGI 和 memcached 服务器的缓存;负载均衡和容错能力;
- 模块化架构。过滤器包括 gzipping、字节范围、分块响应、XSLT、SSI 和图像转换过滤器。如果由代理或 FastCGI/uwsgi/SCGI 服务器处理,则单个页面内的多个 SSI 包含可以并行处理;
- SSL 和 TLS SNI 支持;
- 支持带有加权和依赖性优先级的 HTTP/2。
其他 HTTP 服务器功能
- 基于名称和基于 IP 的虚拟服务器;
- 支持保持连接和流水线连接;
- 访问日志格式、缓冲日志写入、快速日志轮换和 syslog 日志记录;
- 3xx-5xx 错误代码重定向;
- rewrite 模块:使用正则表达式更改 URI;
- 根据客户端地址执行不同的功能;
- 基于客户端 IP 地址、密码(HTTP Basic 身份验证)和子请求结果的访问控制;
- 验证 HTTP referer;
- PUT、DELETE、MKCOL、COPY 和 MOVE 方法;
- FLV 和 MP4 流媒体;
- 响应速率限制;
- 限制来自单个地址的同时连接数或请求数;
- 基于 IP 的地理位置;
- A/B 测试;
- 请求镜像;
- 嵌入式 Perl;
- njs 脚本语言。
邮件代理服务器功能
- 使用外部 HTTP 身份验证服务器将用户重定向到 IMAP 或 POP3 服务器;
- 使用外部 HTTP 身份验证服务器和连接重定向到内部 SMTP 服务器进行用户身份验证;
- 认证方法
- POP3:USER/PASS、APOP、AUTH LOGIN/PLAIN/CRAM-MD5;
- IMAP:LOGIN、AUTH LOGIN/PLAIN/CRAM-MD5;
- SMTP:AUTH LOGIN/PLAIN/CRAM-MD5;
- SSL 支持;
- STARTTLS 和 STLS 支持。
TCP/UDP 代理服务器功能
- 通用的 TCP 和 UDP 代理;
- TCP 的 SSL 和 TLS SNI 支持;
- 负载均衡和容错能力;
- 基于客户端地址的访问控制;
- 根据客户端地址执行不同的功能;
- 限制来自单个地址的同时连接数;
- 访问日志格式、缓冲日志写入、快速日志轮换和 syslog 日志记录;
- 基于 IP 的地理位置;
- A/B 测试;
- njs 脚本语言。
安装
sudo zypper install nginx服务管理
Nginx 服务由 Systemd 管理。要启动 Nginx,请运行
sudo systemctl start nginx
要在系统启动时自动启动 Nginx,请运行
sudo systemctl enable nginx
如果您更改了 Nginx 配置,请记住运行
sudo systemctl restart nginx
配置
openSUSE 已经提供了一个默认配置,可以正常工作。但是,您需要创建自己的网站配置。
配置静态网站
在 /etc/nginx/vhosts.d/ 目录下,您可以创建任意数量的网站配置文件。通常每个站点一个文件,可以命名为 your-domain.conf。
配置 Node.js/Go 应用的代理
Node.js 和 Go 应用可以自行提供 HTTP 连接。但是,当处理 SSL、负载均衡、微服务等时,Nginx 提供了更简单、更灵活的解决方案。使用 Nginx,您无需在编码时担心应用程序的部署方式。
单实例
server {
listen 80; # IPv4
listen [::]:80; # IPv6
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000; # URL to the Node.js app
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
负载均衡
以下是使用负载均衡进行大型网站的许多原因。Nginx 使负载均衡变得容易
upstream backend {
server 192.168.1.1:3333; # URL your Node.js app instance
server 192.168.1.2:3333; # URL your Node.js app instance
server 192.168.1.3:3333; # URL your Node.js app instance
server 192.168.1.4:3333; # URL your Node.js app instance
server 192.168.1.5:3333; # URL your Node.js app instance
server 192.168.1.6:3333; # URL your Node.js app instance
server 192.168.1.7:3333; # URL your Node.js app instance
server 192.168.1.8:3333; # URL your Node.js app instance
}
server {
listen 80; # IPv4
listen [::]:80; # IPv6
server_name example.com;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
微服务
如果您拥有一台功能强大的服务器并想在上面运行多个微服务,Nginx 允许将请求拆分到不同的应用程序。
server {
listen 80; # IPv4
listen [::]:80; # IPv6
server_name example.com;
location /blog {
proxy_pass http://127.0.0.1:3000; # URL to the Node.js app
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
location /forum {
proxy_pass http://127.0.0.1:4000; # URL to the other Node.js app
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
故障排除
以下问题有解决方案。
问题 1
解释解决方案或提供 SDB 文章链接。
问题 2
解释解决方案或提供 SDB 文章链接。
已知问题
以下问题尚未找到解决方案。
问题 1
描述问题并提供 Bugzilla 错误报告 URL(如果可能)。
问题 2
描述问题并提供 Bugzilla 错误报告 URL(如果可能)。
内部链接
- Certbot,为 Nginx 启用 HTTPS
- Setup openSUSE VPS,一些先决条件