nginx location语法参考
https://www.cnblogs.com/duhuo/p/8323812.html
配置示例
vue 二级目录
location ~ /xxx/ {
try_files $uri $uri/ /bbb/index.html;
}
正向代理配置
支持访问https,使用选项:curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
server {
listen 8443; # Nginx监听的本地端口用于接收客户端的代理请求
resolver 8.8.8.8; # DNS解析器地址,用于解析上游服务器域名
proxy_connect;
proxy_connect_allow 443;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
proxy_pass $scheme://$host$request_uri; # 将请求代理至HTTPS服务器
proxy_set_header Host $host; # 传递原始Host头给后端服务器
}
}
支持访问https,必须使用选项:curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS); // Available since PHP 7.3.0 and cURL 7.52.0
server {
listen 8443 ssl; # Nginx监听的本地端口用于接收客户端的代理请求
resolver 8.8.8.8; # DNS解析器地址,用于解析上游服务器域名
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
proxy_connect;
proxy_connect_allow 443;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
access_log /data/www/logs/proxy.log main;
location / {
proxy_pass $scheme://$host$request_uri; # 将请求代理至HTTPS服务器
proxy_set_header Host $host; # 传递原始Host头给后端服务器
}
}
证书可以使用自签名的证书,但是这样php这边就不能验证证书是否有效了。
// 不检查代理服务器证书 (Available since PHP 7.3.0 and cURL 7.52.0)
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYPEER, false); // 不验证代理服务器的证书的有效性
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYHOST, false); // 不验证代理服务器的域名是否与证书中的域名匹配
PHP完整示例
<?php
//要访问的目标页面
$page_url = "https://www.baidu.com/";
//代理ip,由快代理提供
$proxy = "192.168.88.128:8443";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $page_url);
//设置代理
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYPEER, false); // 不验证代理服务器的证书的有效性
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYHOST, false); // 不验证代理服务器的域名是否与证书中的域名匹配
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//自定义header
$headers = array();
$headers[] = 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
echo curl_error($ch), PHP_EOL;
curl_close($ch);
echo $result;
echo "\n\nfetch " . $info['url'] . "\ntimeuse: " . $info['total_time'] . "s\n\n";