在线安装

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