Nginx
高性能的HTTP和反向代理服务器,Nginx 的主要功能:
- HTTP 服务器:Nginx 可以作为独立的 HTTP 服务器,提供静态和动态内容的托管。
- 反向代理:Nginx 可以作为反向代理服务器,将客户端请求转发到后端服务器,并将响应返回给客户端。
- 负载均衡:Nginx 支持多种负载均衡算法,如轮询、加权轮询和 IP 哈希,以实现请求的分发和服务器资源的优化利用。
- 邮件代理:Nginx 可以作为邮件代理服务器,支持 IMAP、POP3 和 SMTP 协议。
- 缓存:Nginx 支持 HTTP 缓存,可以缓存静态和动态内容,以提高性能和减少服务器负载。
- 安全性:Nginx 提供了多种安全功能,如访问控制、DDoS 保护和 SSL/TLS 加密。
配置
反向代理
每个站点在 conf.d目录下新增一个类似ssl.conf的配置文件,这样做的好处是将每个站点的配置单独放在一个文件,方便区分和修改.
1 2 3
| ls -al /etc/nginx/conf.d/ total 12K -rw-r--r-- 1 root root 1.5K Sep 12 10:08 ssl.conf
|
这样启用的原理是(debian类的linux)nginx的默认配置(/etc/nginx/nginx.conf)有这样一行,即会将该目录下以conf做后缀名的配置文件
都包含在内
1
| include /etc/nginx/default.d/*.conf;
|
样例配置如下,这套配置默认启用ssl,将证书放在/etc/nginx/ssl目录下,最好是范域名证书,这样所有站点都可以使用同一份证书文件
同时开启了http自动跳转https
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| server { # SSL 默认访问端口号为 443 listen 443 ssl http2; listen [::]:443 ssl http2; # 请填写绑定证书的域名 server_name demo.example.com;
# 请填写证书文件的相对路径或绝对路径 ssl_certificate /etc/nginx/ssl/fullchain.pem; # 请填写私钥文件的相对路径或绝对路径 ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_session_timeout 5m; # 请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=63072000" always;
location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_buffering off; proxy_request_buffering off; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } }
server { listen 80; # 请填写绑定证书的域名 server_name demo.example.com;
# 把 HTTP 的域名请求转成 HTTPS location / { return 301 https://$host$request_uri; } }
|
密码认证/basic auth
添加这段配置,当访问/admin路径时需要输入密码才允许继续
1 2 3 4 5
| location /admin { auth_basic "Please input password"; #这里是验证时的提示信息 auth_basic_user_file /etc/nginx/passwd/admin_passwd; proxy_pass http://localhost:9090; }
|
nginx密码格式为 “用户名:加密密码”,可以使用htpasswd工具生成密码.
htpasswd 工具支持多种加密算法,包括 MD5、bcrypt、CRYPT 和 SHA。建议使用更安全的算法,如 bcrypt
1 2
| sudo htpasswd -c /etc/nginx/passwd/admin_passwd admin
|
管理面板
- nginx-ui,和使用nginx配置差不多,只是提供了UI方便操作,同时有一些工具如ssl证书管理,第三方认证等
- Nginx Proxy Manager,有UI,支持ssl证书管理,但和nginx配置有些不同,需要掌握新增的概念不点不太友好
references
- template
- auto generate
- ningx-ui,开源nginx管理面板