Nginx https 加密网站的搭建 { (1)在 serverb 机器上创建私钥 [root@serverb ~]# openssl genrsa 2048 > serverb-web.key <==在家目录下生成了serverb-web.key文件 (2)在 serverb 机器上创建证书的颁发请求 [root@serverb ~]# openssl req -new -key serverb-web.key -out serverb-web.csr <==在家目录下生成了serverb-web.csr文件 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN <==中国 State or Province Name (full name) []:shanghai <==上海 Locality Name (eg, city) [Default City]:shanghai <==上海 Organization Name (eg, company) [Default Company Ltd]:uplooking org <==公司 Organizational Unit Name (eg, section) []:www.uplooking.com <==部门 Common Name (eg, your name or your server's hostname) []:www.uplooking.com <==服务器域名 Email Address []:[email protected] <==邮箱 Please enter the following 'extra' attributes <==额外信息可补填写 to be sent with your certificate request A challenge password []: An optional company name []: (3)将证书颁发请求提交给 ca(实验环境以 servera 机器模拟 ca) [root@serverb ~]# scp serverb-web.csr servera:/root <==将serverb-web.csr文件复制到servera的家目录下 (4)将 servera 设置为 ca [root@servera ~]# openssl genrsa -des3 -out ca.key 4096 <==在root家目录下生成了ca.key文件 该步骤中需要输入密码,必须>=4位字符 [root@servera ~]# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt <==在root家目录下生成ca.crt文件 Enter pass phrase for ca.key: <==此处需要输入第(4)步中设置的密码 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:shanghai Locality Name (eg, city) [Default City]:shanghai Organization Name (eg, company) [Default Company Ltd]:ca.shanghai Organizational Unit Name (eg, section) []:ca shanghai Common Name (eg, your name or your server's hostname) []:ca.shanghai.com Email Address []:[email protected] (5)ca 经过资料审核后为 serverb 机器创建证书 [root@servera ~]# openssl x509 -req -days 365 -in serverb-web.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out serverb-web.crt <==在root家目录下生成serverb-web.crt文件 Signature ok subject=/C=CN/ST=shanghai/L=shanghai/O=redhat.org ivy company/OU=www.redhat.com/CN=www.redhat.com/emailAddress=[email protected] Getting CA Private Key Enter pass phrase for ca.key: <==此处需要输入第(4)步中设置的密码 (6)证书创建成功将证书颁发给 serverb [root@servera ~]# scp serverb-web.crt serverb:/root <==将serverb-web.crt文件复制到servera的家目录下 (7)serverb 取回合法证书后将证书拷贝至系统默认目录下 [root@serverb ~]# cp serverb-web.crt /etc/pki/tls/certs/ [root@serverb ~]# cp serverb-web.key /etc/pki/tls/private/ [root@serverb ~]# chmod 400 /etc/pki/tls/private/serverb-web.key (8)配置 ssl 网站,nginx 默认有 ssl 的网站配置示例 [root@serverb ~]# cd /etc/nginx/conf.d/ [root@serverb conf.d]# cp example_ssl.conf www.uplooking.com.conf [root@serverb ~]# vim /etc/nginx/conf.d/www.uplooking.com.conf server { listen 443 ssl; server_name www.uplooking.com; ssl_certificate /etc/pki/tls/certs/serverb-web.crt; ssl_certificate_key /etc/pki/tls/private/serverb-web.key; #以上两句在指定证书所存放的路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout ssl_ciphers 5m; HIGH:!aNULL:!MD5; #指出允许的密码,密码指定为 OpenSSL 支持的格式 ssl_prefer_server_ciphers on; #依赖 SSLv3 和 TLSv1 协议的服务器密码将优先于客户端密码 location / { root /usr/share/nginx/redhatssl.com; index index.html index.htm; #ssl 网站的网页文件根目录存放位置 } } (9)创建 ssl 网站的网页文件存放目录 [root@serverb ~]# mkdir /usr/share/nginx/uplooking.com [root@serverb ~]# echo redhatssl web > /usr/share/nginx/uplooking/index.html (10)重启 nginx 服务 [root@serverb ~]# systemctl restart nginx.service (11)在 servera 添加相应的端口转发规则,https 默认监听 443 端口 [root@servera ~]# iptables -t nat -A PREROUTING -d 172.25.41.10 -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.0.11:443 [root@servera ~]# iptables-save > /etc/sysconfig/iptables (12)客户端 workstation 机器测试。弹出警告页面,因为我们不是权威 ca 颁发的证书,是自己为自己颁发的伪造证书(做实 验嘛),所以浏览器会给出警告。客户端手动添加信任即可。 [root@workstation ~]# echo 172.25.15.10 www.uplooking.com >> /etc/hosts } Nginx 访问控制 { [root@serverb conf.d]# ls default.conf example_ssl.conf www.dabao.com.conf error.conf www.booboo.com.conf www.uplooking.com.conf [root@serverb conf.d]# vim www.uplooking.com.conf [root@serverb conf.d]# cat /etc/nginx/conf.d/www.uplooking.com.conf # HTTPS server # server { listen 443 ssl; server_name www.uplooking.com; ssl_certificate /etc/pki/tls/certs/serverb-web.crt; ssl_certificate_key /etc/pki/tls/private/serverb-web.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/uplooking.com; index index.html index.htm; auth_basic "1111"; <==提示信息 auth_basic_user_file /usr/share/nginx/passwd.db; } } [root@serverb conf.d]# htpasswd -c /usr/share/nginx/passwd.db booboo <==創建用戶booboo和密碼 New password: Re-type new password: Adding password for user booboo [root@serverb conf.d]# systemctl restart nginx.service [root@serverb test]# vim /etc/nginx/conf.d/www.uplooking.com.conf server { listen 443 ssl; server_name www.uplooking.com; ssl_certificate /etc/pki/tls/certs/serverb-web.crt; ssl_certificate_key /etc/pki/tls/private/serverb-web.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/uplooking.com; index index.html index.htm; auth_basic "1111"; auth_basic_user_file /usr/share/nginx/passwd.db; } #阻止别人访某些目录下的特定文件,比如我网站主目录下有个 test 目录,我不想让别人访问我 test 目录下的”.txt”和”.doc”的文件 location ~* \.(txt|doc)$ { root /usr/share/nginx/uplooking.com/test; index index.html index.htm; deny all; } } [root@serverb test]# systemctl restart nginx } Nginx 日志管理 { 方法1: #在 Nginx 主配置中有关 Nginx 日志的相关参数主要有两条。 log_format 指定日志格式 access_log 指定日志存放路径 #Nginx 默认并不支持我们所熟悉的 cronolog 方式来 #对每天的日志进行截断,那么我们可以通过以下方法来解决。 [root@example ~]# mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access.log1 [root@example ~]# touch /usr/local/nginx/logs/access.log [root@example ~]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid` #然后以 crond 的方式或者 logrotate 的方式运行 方法2: #首先下载并编译安装我们 cronolog [root@example ~]# tar xf cronolog-1.6.2.tar.gz [root@example ~]# ./configure [root@example ~]# make && make install [root@example ~]# service nginx stop [root@example ~]# mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access.log.bak [root@example ~]# mkfifo /usr/local/nginx/logs/access.log [root@example ~]# cronolog /usr/local/nginx/logs/access.log.%Y%m%d < /usr/local/nginx/logs/access.log & [root@example ~]# service nginx start 访问一下自己的主机,然后查看/usr/local/nginx/logs/目录下是否多出个 access.log.%Y%m%d 文件,查看一下这个文 件里的内容是否是我们的访问日志。 这里需要注意的是必需在 Nginx 启动之前执行 cronolog 命令,否则 Nginx 将无法正常启动。 对于一些你不需要记录的日志内容,我们可以使用以下方式关闭对这些文件的日志记录。 location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ { access_log off; } Nginx Rewrite 规则 { what #URL Rewrite,即 URL 重写,就是把传入 Web 的请求重定向到其他 URL 的过程 why #美观,安全,方便 举例 #比如 http://www.123.com/news/index.asp?id=123 使用 URLRewrite 转换后可以显示为 http://www.123.com/news/123.html 语法 #location 只匹配$path,不匹配主机名等其他信息 #if @可以匹配除路径以外的其他信息,如主机名、客户端 ip 等 @应用于 server 和 location 环境内 @if (condition) { ... } #匹配表达式,匹配成功则执行大括号中的地址重写 #if 可以支持如下条件判断匹配符号{ ~ #区分大小写匹配 ~* #不区分大小写匹配 !~ #区分大小写不匹配 !~* #不区分大小写不匹配 -f 和!-f#判断是否存在文件 -d 和!-d#判断是否存在目录 -e 和!-e#判断是否存在文件或目录 -x 和!-x#判断文件是否可执行 #在匹配过程中可以引用一些 Nginx 的全局变量{ $args, 请求中的参数; $document_root, 针对当前请求的根路径设置值; $host, 请求信息中的"Host",如果请求中没有 Host 行,则等于设置的服务器名; $limit_rate, 对连接速率的限制; $request_method, 请求的方法,比如"GET"、"POST"等; $remote_addr, 客户端地址; $remote_port, 客户端端口号; $remote_user, 客户端用户名,认证用; $request_filename, 当前请求的文件路径名 $query_string, 与$args 相同; $scheme, 所用的协议,比如 http 或者是 https $server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1"; $server_addr, 服务器地址,如果没有用 listen 指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费); $server_name, 请求到达的服务器名; $document_uri 与$uri 一样,URI 地址; $server_port, 请求到达的服务器端口号;} #改写 {rewrite 旧地址 新地址 标记位} #标记位flag{ last #相当于 Apache 里的[L]标记,表示完成 rewrite break #本条规则匹配完成后,终止匹配,不再匹配后面的规则 redirect #返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址 permanent #返回 301 永久重定向,浏览器地址会显示跳转后 URL 地址} } Nginx Rewrite 实验1 { #用户在访问 www.uplooking.com 网站的 news 目录时,我这个目录还在建设中,那么想要实现的就是用户访问该目录下任何一个文件,返回的都是首页文件,给用户以提示。 进入 www.uplooking.com 的网页文件根目录,该目录下创建 news 测试目录,在 news 下创建一些测试文件,测试文件中包含index.html [root@serverb /]# cd /usr/share/nginx/uplooking.com/ [root@serverb uplooking.com]# mkdir news [root@serverb uplooking.com]# cd news/ [root@serverb news]# echo building > index.html [root@serverb news]# touch new1.html new2.html #编写 rewrite,因为是匹配路径,所以使用 location 即可,如下所示,如果$path 中匹配到/news/,则将从/news/开始后边匹配任意字符的地址重写为/news/index.html,标记位使用 break,停止匹配,如果使用 last 则出现死循环,因为改写完成的地址中仍然包含/news,使用 last 会进行二次改写。 [root@serverb news]# vim /etc/nginx/conf.d/www.uplooking.com.conf server { listen 443 ssl; server_name www.uplooking.com; root /usr/share/nginx/uplooking.com; <==全局配置,如果放置在最后还能生效?需要验证! ssl_certificate /etc/pki/tls/certs/serverb-web.crt; ssl_certificate_key /etc/pki/tls/private/serverb-web.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/uplooking.com; index index.html index.htm; auth_basic "1111"; auth_basic_user_file /usr/share/nginx/passwd.db; } #阻止别人访某些目录下的特定文件,比如我网站主目录下有个 test 目录,我不想让别人访问我 test 目录下的”.txt”和”.doc”的文件 location ~* \.(txt|doc)$ { root /usr/share/nginx/uplooking.com/test; index index.html index.htm; deny all; } #从/news/开始后边匹配任意字符的地址重写为/news/index.html location ~* /news { rewrite ^/news/.* /news/index.html break; } } #重启 nginx 服务 [root@serverb news]# systemctl restart nginx.service } Nginx Rewrite 实验2 { #用户在访问 www.uplooking.com 网站时访问地址如果为/uplook/11-22-33.html 重写后真实地址为/uplook/11/22/33.html #创建测试目录和文件 [root@serverb ~]# cd /usr/share/nginx/uplooking.com/ [root@serverb uplooking.com]# mkdir uplook [root@serverb uplooking.com]# mkdir -p uplook/11/22 [root@serverb uplooking.com]# cd uplook/11/22 [root@serverb 22]# echo 1111111222222223333333 > 33.html #编写 rewrite,location 匹配$path,改写中使用到正则表达式,旧地址中^表示以某个字符串开始,[ ]表示匹配字符组的任一字符,+表示匹配前一字符 1 次及 1 次以上,\表示转义,()用于字符串保存,$表示以某个字符串结尾,新地址中$用于引用保存的内存,$1 表示第一个被保存的字符串,依次类推。 [root@serverb 22]# vim /etc/nginx/conf.d/www.uplooking.com.conf location ~* /uplook { rewrite ^/uplook/([0-9]+)-([0-9]+)-([0-9]+)\.html$ /uplook/$1/$2/$3.html last; ?老师说最多保存9个????需要验证 } #重启 nginx 服务 [root@serverb 22]# systemctl restart nginx.service #思考? rewrite支持正则表达式,但是如果其中引用了变量,那会怎样呢? $ { } } Nginx Rewrite 实验3 { #当访问booboo.uplooking.com时,访问的是www.uplooking.com/booboo/index.html [root@serverb ~]# vim /etc/nginx/conf.d/www.uplooking.com.conf server { listen 80; server_name ~.*\.uplooking\.com; <==此处是正则表达式,也可写成"*.uplooking.com" root /usr/share/nginx/uplooking.com; index index.html index.htm; if ( $http_host ~* ^www\.uplooking\.com$ ) { break; } #如果用户访问的是 www.uplooking.com,则不做 rewrite if ( $http_host ~* ^(.*)\.uplooking\.com$ ) { set $domain $1; } rewrite /.* /$domain/index.html break; } #将用户输入的.uplooking.com 之前的字符串保存并将保存的内存赋值给 domain 变量 #创建测试文件 [root@serverb ~]# cd /usr/share/nginx/uplooking.com/ [root@serverb uplooking.com]# mkdir booboo [root@serverb uplooking.com]# echo booboo > booboo/index.html [root@serverb ~]# systemctl restart nginx.service 客户端测试 [root@workstation ~]# echo 172.25.15.10 booboo.uplooking.com >> /etc/hosts } Nginx Rewrite实验总结 { [root@serverb uplooking.com]# cat /etc/nginx/conf.d/www.uplooking.com.conf server { #监听443端口 listen 443 ssl; server_name *.uplooking.com; #域名为“任意字符.uplooking.com” root /usr/share/nginx/uplooking.com; #网站根目录 ssl_certificate /etc/pki/tls/certs/serverb-web.crt; ssl_certificate_key /etc/pki/tls/private/serverb-web.key; #私钥和公钥存放的路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; #当访问booboo.uplooking.com时,访问的是www.uplooking.com/booboo/index.html if ( $http_host ~* ^www\.uplooking\.com ) { break; } if ( $http_host ~* ^(.*)\.uplooking\.com ) { set $domain $1; } rewrite /.* /$domain/index.html break; #登陆需要用户名和密码 location / { root /usr/share/nginx/uplooking.com; index index.html index.htm; auth_basic "1111"; auth_basic_user_file /usr/share/nginx/passwd.db; } #阻止别人访问某些目录下的特定文件,比如我网站主目录下有个 test 目录,我不想让别人访问我 test 目录下的”.txt”和”.doc”的文件 location ~* \.(txt|doc)$ { root /usr/share/nginx/uplooking.com/test; index index.html index.htm; deny all; } #用户在访问 www.uplooking.com 网站的 news 目录时,我这个目录还在建设中,那么想要实现的就是用户访问该目录下任何一个文件,返回的都是首页文件,给用户以提示。 location ~ /news { root /usr/share/nginx/uplooking.com; rewrite ^/news/.* /news/index.html break; } #用户在访问 www.uplooking.com 网站时访问地址如果为/uplook/11-22-33.html 重写后真实地址为/uplook/11/22/33.html location ~ /uplook { root /usr/share/nginx/uplooking.com; rewrite ^/uplook/([0-9]+)-([0-9]+)-([0-9]+)\.html$ /uplook/$1/$2/$3.html last; } #用户在访问 www.uplooking.com 网站时访问地址如果为/booboo/1-2-3-4-5-6-7-8-9.html 重写后真实地址为/booboo1/2/3/4/5/6/7/8/9.html location ~ /booboo { root /usr/share/nginx/uplooking.com; rewrite ^/booboo/([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /booboo/$1/$2/$3/$4/$5/$6/$7/$8/$9.html last; } } #思考匹配的优先级和正则表达式的使用方法 } Nginx 反向代理 Nginx proxy { Web 服务器加速 反向代理(Reverse Proxy)方式 #指以代理服务器来接受 internet 上的连接请求 #然后将请求转发给内部网络上的服务器 #并将从服务器上得到的结果返回给 internet 上请求连接的 客户端 #此时代理服务器对外就表现为一个服务器。 优点 #代理服务器可以缓存一些 web 的页面,降低了 web 服务器的访问量,所以可以降低 web 服务器的负载。 #Nginx proxy 王牌功能,利用 proxy 基本可以实现一个完整的 7 层负载均衡 特色 #功能强大,性能卓越,运行稳定。 #配置简单灵活。 #能够自动剔除工作不正常的后端服务器。 #上传文件使用异步模式。 #支持多种分配策略,可以分配权重,分配方式灵活。 配置 #一对一 proxy_pass #一对多 upstream proxy_pass #Upstream 详解 @轮询(默认) @weight @ip_hash @fair(第三方) @url_hash(第三方) @设备状态值:Nginx 支持同时设置多组的负载均衡,用来给不用的 server 来使用。{ down 表示单前的 server 暂时不参与负载 weight 默认为 1.weight 越大,负载的权重就越大。 max_fails :允许请求失败的次数默认为 1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误 fail_timeout:max_fails 次失败后,暂停的时间。 backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。} #nginx 缓存 } Nginx 反向代理 实验1对1 { root@serverb ~]# cd /etc/nginx/conf.d/ [root@serverb conf.d]# vim www.proxy.com.conf server { listen 80; server_name www.proxy.com; location / { proxy_pass http://192.168.1.19; #确定需要代理的 URL,端口或 socket。 } } (3)重启 nginx 服务。 [root@serverb conf.d]# systemctl restart nginx.service (4)客户端 workstation 测试 [root@workstation ~]#echo 172.25.15.10 www.proxy.com >> /etc/hosts } Nginx 反向代理 实验1对多 { (1)在 nginx 配置上 upstream 字段,upstream 是 HTTP 负载均衡模块。upstream 这个字段设置一群服务器,可以将这个字段放在 proxy_pass 和 fastcgi_pass 指令中作为一个单独的实体,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP 和 Unix socket 的服务器。 [root@serverb ~]# vim /etc/nginx/nginx.conf upstream apache-servers { server 192.168.1.12:80; server 192.168.1.19:80; } #如上,定义了一个 upstream 字段,给该 upstream 起了名字叫做 apache-servers,然后定义了需代理的两台服务器的 ip 和端口。 (2)配置 proxy_pass,将刚刚定义的 upstream 名称放在 proxy_pass 指令中作为一个单独的实体。 [root@serverb ~]# vim /etc/nginx/conf.d/www.proxy.com.conf location / { proxy_pass http://apache-servers; #确定需要代理的 URL,端口或 socket proxy_set_header Host $host; #这个指令允许将发送到后端服务器的请求头重新定义或者增加一些字段。 这个值可以是一个文本,变量或者它们的组合。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; proxy_set_header X-Real-IP $remote_addr; #确定在何种情况下请求将转发到下一个服务器: #error - 在连接到一个服务器,发送一个请求,或者读取应答时发生错误。 #timeout - 在连接到服务器,转发请求或者读取应答时发生超时。 #invalid_header - 服务器返回空的或者错误的应答。 #http_500 - 服务器返回 500 代码。 #http_502 - 服务器返回 502 代码。 #http_503 - 服务器返回 503 代码。 #http_504 - 服务器返回 504 代码。 #http_404 - 服务器返回 404 代码。 #off - 禁止转发请求到下一台服务器。 proxy_redirect off; #如果需要修改从后端服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。 } (3)重启 nginx 服务 [root@serverb ~]# systemctl restart nginx.service (4)客户端 workstation 测试 } Nginx 反向代理 proxy weight 实验 { #指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 upstream apache-servers { server 192.168.0.12:80 weight=4; server 192.168.0.19:80 weight=1; } } Nginx 反向代理 proxy ip_hash 实验 { #每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 upstream apache-servers { ip_hash; server 192.168.0.12:80; server 192.168.0.19:80; } } Nginx 反向代理 proxy fair 实验 { fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream apache-servers { server 192.168.0.12:80; server 192.168.0.19:80; fair; } } Nginx 反向代理 proxy url_hash 实验 { #url_hash(第三方)按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。 upstream apache-servers { url_hash; server 192.168.0.12:80; server 192.168.0.19:80; } } Nginx 反向代理 proxy 缓存 实验 { proxy_temp_path /usr/share/nginx/proxy_temp_dir 1 2; proxy_cache_path /usr/share/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_web:50m inactive=1d max_size=30g; upstream apache-servers { server 192.168.0.12:80 weight=4; server 192.168.0.19:80 weight=1; } #建立全局配置项中的缓存文件放置位置,并将目录的拥有者设置为 nginx [root@serverb ~]# mkdir -p /usr/share/nginx/proxy_temp_dir /usr/share/nginx/proxy_cache_dir [root@serverb ~]# chown nginx /usr/share/nginx/proxy_temp_dir/ /usr/share/nginx/proxy_cache_dir/ [root@serverb ~]# vim /etc/nginx/conf.d/www.proxy.com.conf location / { proxy_pass http://apache-servers; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_cache cache_web; proxy_cache_valid 200 302 12h; proxy_cache_valid 301 1d; proxy_cache_valid any 1h; proxy_buffer_size 4k; proxy_buffers 432k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; #对缓存做相关设置,如缓存文件大小等 } [root@serverb ~]# systemctl restart nginx.service 没访问之前查看缓存目录,目录为空 [root@serverb ~]# ll /usr/share/nginx/proxy_cache_dir/ total 0 }