在线安装
centos7.6
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum install -y epel-release
yum install -y nginx
离线安装
yum install -y nginx --downloadonly --downloaddir=nginx
nginx配置模板
如下是https的server块
server {
listen 443 ssl;
server_name www.zhaoq.top;
ssl_certificate /root/ssl/server.crt;
ssl_certificate_key /root/ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#location / {
# root html;
# indes.html index.htm;
#}
location / {
proxy_pass http://10.10.10.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
#location /service2/ {
# proxy_pass http://internal-service2:port/; # 代理第二个服务
#}
}
如下是http的server块
server {
listen 88;
server_name www.zhaoq.top; # 可以是域名或服务器的 IP 地址
location / {
proxy_pass http://10.10.10.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
如果是想让所有https的域名 访问的时候 不需要在最前面加上https而是直接输入域名就能访问
可以将管理http 80端口的server改成如下配置
server {
listen 80;
listen [::]:80;
#server_name _;
#root /usr/share/nginx/html;
server_name *.zhaoq.top; # 通过泛域名的形式,将所有访问该域名80转到对应的https也可以使用域名,如 example.com
return 301 https://$host$request_uri; # 将HTTP请求重定向到HTTPS
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
nginx配置项说明
server {
listen 443 ssl; # 监听443端口,并启用SSL/TLS
server_name zhaoq.top; # 设置服务器名称,通常是域名
ssl_certificate /root/ssl/server.crt; # 指定SSL证书文件的位置
ssl_certificate_key /root/ssl/server.key; # 指定SSL私钥文件的位置
ssl_session_cache shared:SSL:1m; # 设置SSL会话缓存,大小为1MB
ssl_session_timeout 5m; # 设置SSL会话超时时间为5分钟
ssl_protocols TLSv1.2; # 只允许使用TLSv1.2协议
ssl_ciphers HIGH:!aNULL:!MD5; # 设置加密套件,排除不安全的算法
ssl_prefer_server_ciphers on; # 优先使用服务器端支持的加密套件
location / { # 定义根路径(/)的处理规则
proxy_pass http://10.10.10.1:3000; # 将请求代理到后端服务器10.10.10.1的3000端口
proxy_set_header Host $host; # 将原始请求中的Host头传递给后端服务器
proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 将X-Forwarded-For头添加到请求中,包含客户端的真实IP
proxy_set_header X-Forwarded-Proto $scheme; # 将请求的协议(HTTP或HTTPS)传递给后端服务器
}
# 下面的location块被注释掉了,可以用于代理其他服务
# location /service2/ {
# proxy_pass http://internal-service2:port/; # 代理第二个服务
# }
}
nginx优化配置
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
underscores_in_headers on;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl;
server_name zhaoq.top;
ssl_certificate /root/ssl/server.crt;
ssl_certificate_key /root/ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH';
ssl_prefer_server_ciphers on;
location / {
add_header Content-Security-Policy upgrade-insecure-requests;
proxy_pass http://10.10.10.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
client_max_body_size 1000m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx安全配置
http {
server_tokens off; # 不在错误页面中显示Nginx版本号
}
设置代理缓存
nginx
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache my_cache;
proxy_cache_valid 200 301 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
proxy_cache_path:定义缓存存储路径和参数。
/var/cache/nginx:缓存文件存储的目录。
levels=1:2:缓存目录的层次结构。
keys_zone=my_cache:10m:定义一个名为my_cache的缓存区域,内存大小为10MB。
max_size=1g:缓存的最大大小为1GB。
inactive=60m:如果缓存项在60分钟内没有被访问,则将其标记为可删除。
use_temp_path=off:不使用临时路径存储缓存。
proxy_cache my_cache;:指定使用my_cache缓存区域。
proxy_cache_valid:定义不同状态码的缓存有效期。
200 301 302 10m:对于200、301和302状态码,缓存有效期为10分钟。
404 1m:对于404状态码,缓存有效期为1分钟。
add_header X-Proxy-Cache $upstream_cache_status;:添加一个响应头来显示缓存状态(HIT/MISS/EXPIRED等)。
2. 安全增强
配置SSL/TLS
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
listen 443 ssl;:监听443端口并启用SSL。
ssl_certificate 和 ssl_certificate_key:指定SSL证书和私钥的路径。
ssl_protocols TLSv1.2 TLSv1.3;:只允许使用TLS 1.2和TLS 1.3协议。
ssl_ciphers HIGH:!aNULL:!MD5;:使用高强度加密套件,并排除不安全的套件。
ssl_prefer_server_ciphers on;:优先使用服务器端支持的加密套件。
ssl_session_cache 和 ssl_session_timeout:设置SSL会话缓存和超时时间。
3. 防御DDoS攻击
限制请求速率
nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 每秒最多1个请求
server {
listen 80;
server_name example.com;
location / {
limit_req zone=one burst=5 nodelay; # 允许突发5个请求,不延迟
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
limit_req_zone:定义一个限速区域。
$binary_remote_addr:使用客户端IP地址作为键。
zone=one:10m:定义一个名为one的区域,内存大小为10MB。
rate=1r/s:每秒最多允许1个请求。
limit_req:应用限速规则。
zone=one:使用前面定义的one区域。
burst=5:允许突发5个请求。
nodelay:不延迟突发的请求,而是立即处理。
总结
通过这些变更,你可以实现以下效果:
性能优化:
Gzip压缩减少了传输数据量,提高了加载速度。
代理缓存减少了后端服务器的负载,加快了响应速度。
安全性增强:
SSL/TLS配置确保了通信的安全性。
禁止显示Nginx版本号减少了潜在的安全风险。
防御DDoS攻击:
限速配置防止了恶意用户通过大量请求对服务器进行攻击。
这些配置变更可以帮助你构建一个更高效、更安全、更稳定的Nginx代理服务器。确保在修改配置后重新加载Nginx以应用更改:
bash
sudo nginx -s reload