<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post/1296/</link>
<title><![CDATA[flutter 开发APP环境搭建]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 03 Apr 2025 02:03:43 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1296/</guid> 
<description>
<![CDATA[ 
	1、安装flutter<br/>创建<br/><div class="code"><br/>D:&#92;java&#92;flutter<br/></div><br/>下载安装包，解压复制到该目录，运行flutter_console.bat。<br/><br/>添加环境变量path , <br/><div class="code"><br/>D:&#92;java&#92;flutter&#92;bin<br/>D:&#92;java&#92;flutter&#92;bin&#92;cache&#92;dart-sdk<br/></div><br/><br/>环境变量：<br/><div class="code"><br/>PUB_HOSTED_URL=https://pub.flutter-io.cn<br/>FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn<br/></div><br/>2、安装git<br/>正常安装<br/><br/>3、安装chrome<br/>谷歌浏览器，正常安装，ghost环境安装自带的不行。<br/><br/>4、Java环境<br/>修改安装目录为<br/><div class="code">D:&#92;java&#92;jdk-1.8</div><br/>修改jre安装目录为<br/><div class="code"><br/>D:&#92;java&#92;jre1.8.0_431<br/></div><br/><br/>修改系统变量<br/><br/>JAVA_HOME<br/><div class="code"><br/>D:&#92;java&#92;jdk-1.8<br/></div><br/>JRE_HOME<br/><div class="code"><br/>D:&#92;java&#92;jre1.8.0_431<br/></div><br/>CLASSPATH<br/><div class="code"><br/>.;%JAVA_HOME%&#92;lib&#92;dt.jar;%JAVA_HOME%&#92;lib&#92;tools.jar;<br/></div><br/>变量值：.;%JAVA_HOME%&#92;lib&#92;dt.jar;%JAVA_HOME%&#92;lib&#92;tools.jar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //记得前面有个"."<br/>Path<br/><div class="code"><br/>%JAVA_HOME%&#92;bin<br/>%JRE_HOME%&#92;bin<br/></div><br/><br/>5 安装amazon-corretto-17.0.14.7.1-windows-x64到<br/><div class="code"><br/>D:&#92;Corretto<br/></div><br/><br/>6、安装andorid studio<br/><br/>安装到 <br/><div class="code"><br/>D:&#92;androidstudio&#92;androidSetup<br/></div><br/><br/>其中选择自定义安装，选择安装SDK的目录<br/><div class="code"><br/>D:&#92;androidstudio&#92;SDK<br/></div><br/><br/>无法下载 android SDk 配置服务器代理ip<br/>网站检测 <a href="https://ping.chinaz.com/" target="_blank">https://ping.chinaz.com/</a><br/>在当前网站中输入 dl.google.com<br/>host绑定比较快的地区<br/><br/>安装flutter和Dart插件<br/><br/>7、安装VisualStudioSetup<br/><br/>选择C++桌面开发和右侧的win10 SDK<br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1295/</link>
<title><![CDATA[在Ubuntu服务器上部署DeepSeek模型]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Mon, 17 Feb 2025 08:40:22 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1295/</guid> 
<description>
<![CDATA[ 
	一、在Ubuntu服务器上部署DeepSeek模型<br/>要在Ubuntu上通过Ollama安装和使用DeepSeek模型，可以按照以下步骤操作：<br/><br/>安装Ollama<br/>1、使用命令安装Ollama<br/><div class="code"><br/>curl -sSfL https://ollama.com/install.sh &#124; sh<br/></div><br/>2、验证安装是否成功<br/>安装完之后，您可以通过以下命令验证Ollama是否安装成功<br/><div class="code"><br/>ollama --version<br/></div><br/><br/>下载DeepSeek模型<br/><div class="code"><br/>ollama pull deepseek-r1:14b<br/></div><br/><br/>运行模型<br/><div class="code"><br/>ollama run deepseek-r1:14b<br/></div><br/><br/>远程访问:<br/><br/><div class="code"><br/>sudo vi /etc/systemd/system/ollama.service<br/></div><br/>增加<br/><div class="code"><br/>Environment=&quot;OLLAMA_HOST=0.0.0.0&quot;<br/>Environment=&quot;OLLAMA_ORIGINS=*&quot;<br/></div><br/><br/><div class="code"><br/>&#91;Unit&#93;<br/>Description=Ollama Service<br/>After=network-online.target<br/><br/>&#91;Service&#93;<br/>ExecStart=/usr/local/bin/ollama serve<br/>User=ollama<br/>Group=ollama<br/>Restart=always<br/>RestartSec=3<br/>#Environment=&quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin&quot;<br/>#EnVironment=&quot;OLTAMA_HOST=0.0.0.0:11434&quot;<br/>Environment=&quot;OLLAMA_HOST=0.0.0.0&quot;<br/>Environment=&quot;OLLAMA_ORIGINS=*&quot;<br/>&#91;Install&#93;<br/>#WantedBy=default.target<br/>WantedBy=multi-user.target<br/><br/></div><br/><br/>重启服务<br/><div class="code"><br/>systemctl daemon-reload<br/>systemctl restart ollama<br/></div><br/><br/>验证Ollama服务是否正常运行<br/><div class="code"><br/>sudo netstat -tulpn &#124; grep ollama<br/></div><br/><br/>如图所示，则为正常。<br/><br/><a href="http://www.dzhope.com/attachment.php?fid=262" target="_blank"><img src="http://www.dzhope.com/attachment.php?fid=262" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>测试远程访问<br/><div class="code"><br/>curl http://192.168.2.150:11434<br/></div><br/><br/>返回<br/><div class="code"><br/>Ollama is running<br/></div><br/><br/>则正常
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1293/</link>
<title><![CDATA[这样配置，让Nginx更安全]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 25 Jan 2025 06:04:39 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1293/</guid> 
<description>
<![CDATA[ 
	引言<br/>作为使用最广泛的Web服务器之一，Nginx的安全配置显得尤为重要。本文将从多个维度详细介绍如何增强Nginx的安全性，帮助开发运维人员构建一个更安全的Web服务环境。<br/><br/>一、基础安全配置<br/>1. 隐藏版本号信息<br/>默认情况下，Nginx会在响应头中显示版本号，这可能会给攻击者提供服务器信息。攻击者可以根据版本号查找对应版本的已知漏洞进行定向攻击。<br/><div class="code"><br/>http &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 关闭在响应头中显示Nginx版本号<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 默认响应头: Server: nginx/1.18.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 关闭后响应头: Server: nginx<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_tokens off;<br/>&#125;<br/></div><br/>2. 配置安全Headers<br/>添加安全相关的HTTP响应头，可以有效防御常见的Web攻击：<br/><div class="code"><br/># 防止网站被嵌入恶意网页中，避免点击劫持<br/>add_header X-Frame-Options &quot;SAMEORIGIN&quot;;<br/><br/># 启用浏览器XSS防护功能，并在检测到攻击时，停止渲染页面<br/>add_header X-XSS-Protection &quot;1; mode=block&quot;;<br/><br/># 禁止浏览器猜测（嗅探）资源的MIME类型，防止资源类型混淆攻击<br/>add_header X-Content-Type-Options &quot;nosniff&quot;;<br/><br/># 控制引用地址信息的传递，增强隐私保护<br/>add_header Referrer-Policy &quot;strict-origin-origin-when-cross-origin&quot;;<br/><br/># 内容安全策略，控制资源加载来源，防止XSS等攻击<br/># default-src &#039;self&#039;: 只允许加载同源资源<br/># http: https:: 允许通过HTTP和HTTPS加载资源<br/># data:: 允许data:URI的资源（如base64编码的图片）<br/># blob:: 允许blob:URI的资源（如视频流）<br/># &#039;unsafe-inline&#039;: 允许内联脚本和样式（根据需要配置）<br/>add_header Content-Security-Policy &quot;default-src &#039;self&#039; http: https: data: blob: &#039;unsafe-inline&#039;&quot;;<br/></div><br/>二、访问控制优化<br/>1. 限制连接数<br/>为防止DOS攻击，应该限制单个IP的连接数和请求频率：<br/><div class="code"><br/>http &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 定义一个共享内存区域，用于存储IP连接数信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;# $binary_remote_addr: 使用二进制格式存储客户端IP，节省空间<br/>&nbsp;&nbsp;&nbsp;&nbsp;# zone=addr:10m: 指定共享内存区域名称为addr，大小为10MB<br/>&nbsp;&nbsp;&nbsp;&nbsp;limit_conn_zone $binary_remote_addr zone=addr:10m;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 限制每个IP同时最多100个连接<br/>&nbsp;&nbsp;&nbsp;&nbsp;limit_conn addr 100;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 定义请求频率限制，每个IP每秒最多10个请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;# rate=10r/s: 每秒10个请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 应用请求频率限制，burst=20表示最多允许20个请求排队<br/>&nbsp;&nbsp;&nbsp;&nbsp;limit_req zone=req_zone burst=20 nodelay;<br/>&#125;<br/></div><br/>2. 配置白名单<br/>对于管理后台等敏感区域，建议配置IP白名单：<br/><div class="code"><br/>location /admin/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 允许内网IP段访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 192.168.1.0/24: 允许192.168.1.x网段的所有IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;allow 192.168.1.0/24;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 允许另一个内网IP段访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;allow 10.0.0.0/8;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 拒绝其他所有IP访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 开启基础认证<br/>&nbsp;&nbsp;&nbsp;&nbsp;auth_basic &quot;Restricted Access&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;auth_basic_user_file /etc/nginx/.htpasswd;<br/>&#125;<br/></div><br/>三、SSL/TLS安全配置<br/>1. 启用HTTPS<br/>配置SSL证书并强制HTTPS访问：<br/><div class="code"><br/>server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 监听443端口，启用SSL<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen 443 ssl;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 指定SSL证书路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate /path/to/cert.pem;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate_key /path/to/key.pem;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 将所有HTTP请求重定向到HTTPS<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($scheme != &quot;https&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 301 https://$server_name$request_uri;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 启用HSTS，强制浏览器在指定时间内使用HTTPS访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;add_header Strict-Transport-Security &quot;max-age=31536000&quot; always;<br/>&#125;<br/></div><br/>2. 优化SSL配置<br/>使用更安全的SSL配置参数：<br/><div class="code"><br/># 只允许TLS 1.2和1.3版本，禁用不安全的SSL和早期TLS版本<br/>ssl_protocols TLSv1.2 TLSv1.3;<br/><br/># 配置加密套件，按推荐顺序排列<br/># ECDHE: 使用椭圆曲线密钥交换<br/># AES-GCM: 使用AES-GCM加密模式<br/>ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;<br/><br/># 优先使用服务器的加密套件<br/>ssl_prefer_server_ciphers on;<br/><br/># 配置SSL会话缓存，提高性能<br/># shared:SSL:10m: 所有工作进程共享的缓存，大小为10MB<br/>ssl_session_cache shared:SSL:10m;<br/><br/># SSL会话超时时间<br/>ssl_session_timeout 10m;<br/><br/># 启用OCSP Stapling，提供证书状态信息<br/>ssl_stapling on;<br/>ssl_stapling_verify on;<br/>resolver 8.8.8.8 8.8.4.4 valid=300s;<br/>resolver_timeout 5s;<br/></div><br/>四、文件上传安全<br/>1. 限制上传文件大小<br/>防止通过上传大文件耗尽服务器资源：<br/><div class="code"><br/># 限制请求体大小，即上传文件的最大大小为10MB<br/>client_max_body_size 10m;<br/><br/># 设置请求体缓冲区大小为128KB<br/># 超过此大小的请求体会被写入临时文件<br/>client_body_buffer_size 128k;<br/><br/># 配置临时文件存储路径<br/>client_body_temp_path /var/nginx/client_body_temp;<br/></div><br/>2. 配置上传目录权限<br/>确保上传目录的权限配置正确：<br/><div class="code"><br/>location /uploads/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 指定上传根目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;root /var/www/uploads;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 指定临时文件目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;client_body_temp_path /var/www/tmp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 允许的WebDAV方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;dav_methods PUT DELETE MKCOL COPY MOVE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 自动创建上传目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;create_full_put_path on;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 设置目录访问权限<br/>&nbsp;&nbsp;&nbsp;&nbsp;# user:rw - 文件所有者可读写<br/>&nbsp;&nbsp;&nbsp;&nbsp;# group:rw - 组用户可读写<br/>&nbsp;&nbsp;&nbsp;&nbsp;# all:r - 其他用户只读<br/>&nbsp;&nbsp;&nbsp;&nbsp;dav_access user:rw group:rw all:r;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 限制上传文件类型<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($request_filename ~* ^.*?&#92;.(php&#124;php5&#124;sh&#124;pl&#124;py)$) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 403;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/></div><br/>五、防止常见攻击<br/>1. 防止SQL注入<br/>配置特殊字符过滤：<br/><div class="code"><br/>location / &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 检查URL中是否包含特殊字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 如果包含分号、单引号、尖括号等字符，返回444状态码<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 444是Nginx特殊状态码，表示关闭连接而不发送响应头<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($request_uri ~* &#91;;&#039;&lt;&gt;&#93; ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 444;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 检查查询字符串中的特殊字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($args ~* &#91;;&#039;&lt;&gt;&#93; ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 444;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 保护敏感URI<br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~* /(admin&#124;backup&#124;config&#124;db&#124;src)/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/></div><br/>2. 防止目录遍历<br/>禁止访问隐藏文件和目录：<br/><div class="code"><br/># 禁止访问所有以点开头的隐藏文件和目录<br/>location ~ /&#92;. &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 拒绝所有请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 禁止记录访问日志<br/>&nbsp;&nbsp;&nbsp;&nbsp;access_log off;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 禁止记录404错误日志<br/>&nbsp;&nbsp;&nbsp;&nbsp;log_not_found off;<br/>&#125;<br/><br/># 禁止访问特定目录<br/>location ~* ^/(uploads&#124;images)/.*&#92;.(php&#124;php5&#124;sh&#124;pl&#124;py&#124;asp&#124;aspx&#124;jsp)$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br/>&#125;<br/><br/># 防止目录列表<br/>location / &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;autoindex off;<br/>&#125;<br/></div><br/>六、日志安全<br/>1. 配置访问日志<br/>详细记录访问信息，便于安全分析：<br/><div class="code"><br/># 定义详细的日志格式<br/>log_format detailed &#039;$remote_addr - $remote_user &#91;$time_local&#93; &#039;&nbsp;&nbsp;# 记录客户端IP和访问时间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;&quot;$request&quot; $status $body_bytes_sent &#039;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 记录请求信息、状态码和发送字节数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;&quot;$http_referer&quot; &quot;$http_user_agent&quot; &#039;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 记录来源页面和用户代理<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;$request_time $upstream_response_time&#039;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 记录请求处理时间和上游响应时间<br/><br/># 配置访问日志<br/># buffer=32k: 使用32KB缓冲区<br/># flush=5s: 每5秒刷新一次日志<br/>access_log /var/log/nginx/access.log detailed buffer=32k flush=5s;<br/><br/># 对于静态资源，可以关闭访问日志以提高性能<br/>location /static/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;access_log off;<br/>&#125;<br/></div><br/>2. 配置错误日志<br/>设置适当的错误日志级别：<br/><div class="code"><br/># 设置错误日志级别为warn<br/># 可选级别: debug, info, notice, warn, error, crit, alert, emerg<br/>error_log /var/log/nginx/error.log warn;<br/><br/># 对于开发环境，可以使用debug级别获取更多信息<br/># error_log /var/log/nginx/error.log debug;<br/></div><br/>七、其他安全措施<br/>1. 禁止执行脚本<br/>在静态资源目录中禁止执行脚本：<br/><div class="code"><br/>location /static/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 禁止执行PHP文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~ &#92;.(php&#124;php5)$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 只允许特定文件类型<br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~* &#92;.(css&#124;js&#124;jpg&#124;jpeg&#124;png&#124;gif&#124;ico&#124;svg&#124;woff&#124;woff2&#124;ttf&#124;eot)$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires 30d;&nbsp;&nbsp;# 设置缓存时间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_header Cache-Control &quot;public, no-transform&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/></div><br/>2. 配置超时时间<br/>设置合理的超时参数，防止慢速攻击：<br/><div class="code"><br/># 客户端请求体超时时间，单位秒<br/>client_body_timeout 10;<br/><br/># 客户端请求头超时时间<br/>client_header_timeout 10;<br/><br/># 客户端保持连接超时时间<br/># 第一个参数是客户端超时时间<br/># 第二个参数是在响应头中的Keep-Alive超时时间<br/>keepalive_timeout 5 5;<br/><br/># 向客户端发送响应的超时时间<br/>send_timeout 10;<br/><br/># 读取代理服务器响应的超时时间<br/>proxy_read_timeout 10;<br/><br/># 连接代理服务器的超时时间<br/>proxy_connect_timeout 10;<br/></div><br/>总结<br/>以上配置涵盖了Nginx安全加固的主要方面，每个配置都附带了详细的解释和注释。在实际应用中，建议根据具体的业务需求和安全级别要求，对这些配置进行适当的调整。同时，要注意以下几点：<br/>定期更新Nginx到最新的稳定版本<br/><br/>使用配置文件包含（include）来组织大型配置<br/><br/>在应用配置前，使用 nginx -t 检查配置正确性<br/><br/>定期检查日志文件，及时发现安全问题<br/><br/>配合WAF（Web应用防火墙）使用，提供更全面的安全防护<br/><br/>原文：<a href="https://mp.weixin.qq.com/s/OvKZE9wbGzlSL3pu0_2LXg" target="_blank">https://mp.weixin.qq.com/s/OvKZE9wbGzlSL3pu0_2LXg</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1291/</link>
<title><![CDATA[SSH 防爆破：动态拉黑恶意IP]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Mon, 20 Jan 2025 01:53:42 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1291/</guid> 
<description>
<![CDATA[ 
	前言<br/>SSH（Secure Shell）是用于安全远程登录和管理服务器的协议，但其广泛使用也使其成为攻击者暴力破解的目标。SSH爆破攻击是指攻击者通过不断尝试用户名和密码组合，试图破解服务器的登录凭证。这种攻击不仅会消耗服务器资源，还可能导致系统被入侵。因此，采取有效的措施防止SSH爆破攻击至关重要。<br/><br/>实现方式<br/>在Linux系统中，/etc/hosts.allow和/etc/hosts.deny文件用于控制对服务的访问权限。这两个文件的规则基于TCP Wrapper机制，允许系统管理员定义哪些IP地址或主机可以访问特定服务（如SSH）。<br/><br/>/etc/hosts.allow：定义允许访问服务的IP地址或主机。<br/><br/>/etc/hosts.deny：定义禁止访问服务的IP地址或主机。<br/><br/>当两个文件同时存在时，/etc/hosts.allow的规则优先于/etc/hosts.deny的规则。如果某个IP地址在/etc/hosts.allow中被允许访问，那么即使它在/etc/hosts.deny中被拒绝，它仍然可以访问服务。<br/><br/>如果 /etc/hosts.deny 文件为空，所有IP地址都可以访问SSH。<br/><br/>如果 /etc/hosts.deny 文件包含拒绝规则（如 sshd: ALL），则所有IP地址默认被拒绝，除非它们在 /etc/hosts.allow 中被明确允许。<br/><br/>监控并动态更新黑名单<br/>为了动态检测并阻止恶意IP地址，可以编写一个简单的Shell脚本，监控SSH登录失败的日志，并将多次尝试失败的IP地址自动加入 /etc/hosts.deny 文件。<br/><br/><div class="code"> <br/>#!/bin/bash<br/><br/># 配置参数<br/>LOG_FILE=&quot;/var/log/auth.log&quot;&nbsp;&nbsp;# Debian/Ubuntu的SSH日志文件路径<br/>MAX_ATTEMPTS=5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 允许的最大失败尝试次数<br/>TEMP_FILE=&quot;/tmp/ssh_blacklist.tmp&quot;&nbsp;&nbsp;# 临时文件存储IP尝试次数<br/>LAST_POS_FILE=&quot;/tmp/ssh_last_pos.tmp&quot;&nbsp;&nbsp;# 记录上次处理的日志位置<br/><br/># 获取上次处理的日志位置<br/>if &#91; -f &quot;$LAST_POS_FILE&quot; &#93;; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;LAST_POS=$(cat &quot;$LAST_POS_FILE&quot;)<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;LAST_POS=0<br/>fi<br/><br/># 获取当前日志文件大小<br/>CURRENT_POS=$(stat -c %s &quot;$LOG_FILE&quot;)<br/><br/># 如果日志文件没有更新，直接退出<br/>if &#91; &quot;$CURRENT_POS&quot; -le &quot;$LAST_POS&quot; &#93;; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit 0<br/>fi<br/><br/># 从上次位置开始解析日志<br/>tail -c +$((LAST_POS + 1)) &quot;$LOG_FILE&quot; &#124; while read line; do<br/>&nbsp;&nbsp;&nbsp;&nbsp;if echo &quot;$line&quot; &#124; grep -q &quot;Failed password&quot;; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP=$(echo &quot;$line&quot; &#124; awk &#039;&#123;print $11&#125;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; -n &quot;$IP&quot; &#93;; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATTEMPTS=$(grep -c &quot;$IP&quot; &quot;$TEMP_FILE&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$ATTEMPTS&quot; -ge &quot;$MAX_ATTEMPTS&quot; &#93;; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 检查IP是否已在黑名单中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ! grep -q &quot;$IP&quot; /etc/hosts.deny; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;sshd:$IP&quot; &gt;&gt; /etc/hosts.deny<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;IP $IP 已加入黑名单，禁止登录。&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$IP&quot; &gt;&gt; &quot;$TEMP_FILE&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>done<br/><br/># 更新日志位置<br/>echo &quot;$CURRENT_POS&quot; &gt; &quot;$LAST_POS_FILE&quot;<br/></div><br/>将上述脚本保存为 ssh_blacklist.sh并赋予执行权限：<br/><br/><div class="code"><br/>chmod +x ssh_blacklist.sh<br/></div><br/>手动运行脚本或通过定时任务定期运行：<br/><br/> <br/># 手动执行<br/><div class="code"><br/>./ssh_blacklist.sh<br/></div><br/># 设置定时任务执行<br/>crontab -e<br/>添加以下内容：<br/><br/><div class="code"><br/># 每 5 分钟执行一次检测<br/>*/5 * * * * /path/to/ssh_blacklist.sh<br/></div><br/>通过合理配置 /etc/hosts.allow 和 /etc/hosts.deny 文件，结合简单的Shell脚本监控SSH登录失败日志，您可以实现一个基本的SSH黑名单机制，有效拦截异常IP地址，防止暴力破解攻击。这种方法简单易行，适合大多数Linux系统，能够显著提高SSH服务的安全性。
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1290/</link>
<title><![CDATA[Linux服务器Inode清理优化]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Fri, 20 Sep 2024 02:13:42 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1290/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>for i in /*; do echo $i; find $i &#124;wc -l&#124;sort -nr; done<br/></div><br/>查找文件数量多的目录，进行清理
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1289/</link>
<title><![CDATA[ubuntu20安装nvidia-cuda-toolkit安装]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sun, 15 Sep 2024 03:18:35 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1289/</guid> 
<description>
<![CDATA[ 
	在Ubuntu 20.04上安装NVIDIA CUDA Toolkit的步骤如下：<br/><br/>确保你的系统已经安装了NVIDIA的官方驱动。<br/><br/>打开终端，并且添加NVIDIA的CUDA存储库的公钥：<br/><div class="code"><br/>sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub<br/></div><br/><br/>添加CUDA存储库到你的系统：<br/><div class="code"><br/>echo &quot;deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /&quot; &#124; sudo tee /etc/apt/sources.list.d/cuda.list<br/></div><br/><br/>更新软件包列表：<br/><div class="code"><br/>sudo apt update<br/></div><br/>安装CUDA Toolkit（你可以根据需要安装特定版本的CUDA Toolkit，例如cuda-11-2）：<br/><div class="code"><br/>sudo apt install cuda-toolkit-11-2<br/></div><br/><br/>配置环境变量。将以下内容添加到你的.bashrc或.profile文件中：<br/><div class="code"><br/>export PATH=/usr/local/cuda-11.2/bin$&#123;PATH:+:$&#123;PATH&#125;&#125;<br/>export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64$&#123;LD_LIBRARY_PATH:+:$&#123;LD_LIBRARY_PATH&#125;&#125;<br/></div><br/><br/>重新加载环境变量：<br/><div class="code"><br/>source ~/.bashrc<br/></div><br/><br/>或者使用.profile文件的话使用source ~/.profile。<br/><br/>验证安装：<br/><div class="code"><br/>nvcc --version<br/></div><br/>以上步骤会安装CUDA Toolkit以及NVIDIA驱动，如果你已经安装了驱动，则不需要再次安装。请确保在执行这些步骤之前你已经备份了重要数据，并且你有足够的权限来修改系统设置。
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1288/</link>
<title><![CDATA[解决apt-install等命令下载速度过慢的问题]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 14 Sep 2024 06:05:51 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1288/</guid> 
<description>
<![CDATA[ 
	最近在使用 apt-install 命令安装一些包时发现巨卡顿，一个原因肯定是自己家的网速有点慢了，当然最重要的原因还是 apt 源是国外的。网上看到了许多博主的换源过程，但发现他们的操作稍微有点复杂，而且需要修改 source 源文件，为了防止手残导致源文件出错，我直接使用 echo （输出命令）在终端修改源文件，添加源。<br/><br/>依次输入下面几行命令就可以成功将 apt 的源更换为国内的了，<br/><div class="code"><br/>sudo su<br/>echo &quot;deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse&quot; &gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>echo &quot;deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse&quot; &gt;&gt;&nbsp;&nbsp;/etc/apt/sources.list<br/>apt-get update<br/>apt-get upgrade<br/></div>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1281/</link>
<title><![CDATA[使用代理加速docker pull]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Fri, 07 Jun 2024 01:45:10 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1281/</guid> 
<description>
<![CDATA[ 
	创建配置目录和文件<br/>docker pull是由守护进程dockerd执行，因此代理需添加在dockerd的systemd配置中。<br/><div class="code"><br/>sudo mkdir -p /etc/systemd/system/docker.service.d<br/>sudo touch /etc/systemd/system/docker.service.d/proxy.conf<br/></div><br/><br/>编辑proxy.conf文件<br/><br/><div class="code"><br/>&#91;Service&#93;<br/>Environment=&quot;HTTP_PROXY=socks5://192.168.2.103:10808&quot;<br/>Environment=&quot;HTTPS_PROXY=socks5://192.168.2.103:10808&quot;<br/>Environment=&quot;NO_PROXY=localhost,127.0.0.1,.example.com&quot;<br/><br/></div><br/><br/>socks5://192.168.2.103:10808替换为你的本地代理<br/><br/>重载systemd并重启docker服务<br/><br/><div class="code"><br/>sudo systemctl daemon-reload<br/>sudo systemctl restart docker<br/><br/></div><br/><br/>参考<br/><div class="code"><br/>https://zhuanlan.zhihu.com/p/678307663<br/>https://blog.csdn.net/qf0129/article/details/135729862<br/></div>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1277/</link>
<title><![CDATA[centos 安装nodejs 环境]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 24 Jan 2024 03:47:11 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1277/</guid> 
<description>
<![CDATA[ 
	下载源码<br/><div class="code"><br/>wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz<br/></div><br/><br/>解压源码<br/><div class="code"><br/>tar xvf node-v8.11.4-linux-x64.tar.xz<br/></div><br/><br/>创建node目录<br/><div class="code"><br/>cd /usr/local/<br/>mkdir node<br/></div><br/><br/>复制程序<br/><div class="code"><br/>cd node-v8.11.4-linux-x64/<br/>mv * /usr/local/node/<br/></div><br/><br/>建立连接<br/><div class="code"><br/>ln -s /usr/local/node/bin/node /usr/local/bin/node<br/>ln -s /usr/local/node/bin/npm /usr/local/bin/npm<br/></div><br/><br/>测试一下<br/><div class="code"><br/>node -v<br/>npm -v<br/></div><br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1276/</link>
<title><![CDATA[利用aardio语言的fsys.dirWatcher监听目录文件变化的后台服务程序]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 30 Dec 2023 14:47:47 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1276/</guid> 
<description>
<![CDATA[ 
	示例一：<br/><div class="code"><br/><br/>namespace service.threads;<br/><br/>//服务主线程<br/>main = function(serviceName)&#123;<br/>&nbsp;&nbsp;import service;<br/>&nbsp;&nbsp;import thread.event; <br/>&nbsp;&nbsp;import fsys.log;<br/>&nbsp;&nbsp;import console;<br/>&nbsp;&nbsp;import sys.volume;<br/>&nbsp;&nbsp;import process; <br/>&nbsp;&nbsp;import fsys.dirWatcher;<br/>&nbsp;&nbsp;import fsys.dlg.dir;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;service.msgbox(&quot;服务已启动&quot;);<br/>&nbsp;&nbsp;console.open();<br/>&nbsp;&nbsp;//取所有分区信息<br/>&nbsp;&nbsp;var drives = sys.volume.getLogicalDrives()<br/>&nbsp;&nbsp;for(i,drv in drives)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var info = sys.volume.getInfo( drv );<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(info)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var watchDir = info.drive;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watcher = fsys.dirWatcher( watchDir )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( filename,action in watcher.eachChanges() )&#123;<br/>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsys.log.print( watchDir + &quot;&#92;&quot; + filename,&quot; -&gt; &quot;,action,&#039;&#92;r&#92;n&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log( watchDir + &quot;&#92;&quot; + filename,&quot; -&gt; &quot;,action,&#039;&#92;r&#92;n&#039;)<br/>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&#125;<br/><br/>//注意这也是一个独立的线程，用户控制服务停止或启动时都会触发此函数<br/>control = function(control,eventType,pEventData)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;import service;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import thread.event;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var evtTask = thread.event(&quot;NT.SERVICE.CONTROL.&quot; + owner.serviceName,false); <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if( control == 0x1/*_SERVICE_CONTROL_STOP*/ )&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//控制线程中更新srvStatus，第一个参数只要指定需要更新的字段就行了<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.updateStatus(&#123;currentState = 0x3/*_SERVICE_STOP_PENDING*/&#125;,owner.serviceName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evtTask.set();//使事件对象切换为有信号状态,使wait函数退出&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0x0/*_NOERROR*/<br/>&#125;<br/><br/></div><br/><br/>示例二：<br/><div class="code"><br/><br/>namespace service.threads;<br/><br/>//服务主线程<br/>main = function(serviceName)&#123;<br/>&nbsp;&nbsp;import service;<br/>&nbsp;&nbsp;import thread.event; <br/>&nbsp;&nbsp;import fsys.log;<br/>&nbsp;&nbsp;import console;<br/>&nbsp;&nbsp;import win.ui;<br/>&nbsp;&nbsp;import fsys.dirWatcher;<br/>&nbsp;&nbsp;import fsys.dlg.dir;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//用win.form创建一个线程外包对象<br/>&nbsp;&nbsp;var winform = win.form();<br/>&nbsp;&nbsp;winform.messageOnly();//告诉他不需要显示窗口，只保留能处理消息的功能<br/>&nbsp;&nbsp;var watchDir = &quot;C:&quot;;<br/>&nbsp;&nbsp;//创建监视线程 <br/>&nbsp;&nbsp;winform.thrdWatcher = fsys.dirWatcher.thread(<br/>&nbsp;&nbsp;&nbsp;&nbsp;function(filename,action,actionText)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsys.log.print( watchDir + &quot;&#92;&quot; + filename,&quot; -&gt; &quot;,action,&#039;&#92;r&#92;n&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log( watchDir + &quot;&#92;&quot; + filename,&quot; -&gt; &quot;,action,&#039;&#92;r&#92;n&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;, watchDir); <br/>&nbsp;&nbsp;win.loopMessage();<br/><br/>&#125;<br/><br/>//注意这也是一个独立的线程，用户控制服务停止或启动时都会触发此函数<br/>control = function(control,eventType,pEventData)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;import service;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import thread.event;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var evtTask = thread.event(&quot;NT.SERVICE.CONTROL.&quot; + owner.serviceName,false); <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if( control == 0x1/*_SERVICE_CONTROL_STOP*/ )&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//控制线程中更新srvStatus，第一个参数只要指定需要更新的字段就行了<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.updateStatus(&#123;currentState = 0x3/*_SERVICE_STOP_PENDING*/&#125;,owner.serviceName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evtTask.set();//使事件对象切换为有信号状态,使wait函数退出&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0x0/*_NOERROR*/<br/>&#125;<br/><br/></div>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1275/</link>
<title><![CDATA[Python中的Web框架]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 20 Dec 2023 07:30:55 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1275/</guid> 
<description>
<![CDATA[ 
	Python中有许多优秀的Web框架，例如Flask、Django等。这些框架可以帮助我们快速搭建Web应用程序，并实现接口功能。<br/><div class="code"><br/>from flask import Flask<br/>from flask import request<br/>from flask import jsonify<br/><br/>app = Flask(__name__)<br/><br/># 处理GET请求<br/>@app.route(&#039;/api&#039;, methods=&#91;&#039;GET&#039;&#93;)<br/>def api_get():<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 获取请求参数<br/>&nbsp;&nbsp;&nbsp;&nbsp;param = request.args.get(&#039;param&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 处理请求参数<br/>&nbsp;&nbsp;&nbsp;&nbsp;result = &#123;&#039;param&#039;: param&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 返回响应数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;return jsonify(result)<br/><br/># 处理POST请求<br/>@app.route(&#039;/api&#039;, methods=&#91;&#039;POST&#039;&#93;)<br/>def api_post():<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 获取请求数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;data = request.json<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 处理请求数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;result = &#123;&#039;data&#039;: data&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 返回响应数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;return jsonify(result)<br/><br/>if __name__ == &#039;__main__&#039;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;app.run()<br/></div><br/>上面的代码演示了如何使用Flask框架搭建一个简单的接口。其中，@app.route装饰器用于指定接口的URL路径和HTTP请求方法。使用request对象可以获取请求参数和请求数据，使用jsonify函数可以将Python对象转换为JSON格式的响应数据。
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1273/</link>
<title><![CDATA[python]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 16 Nov 2023 23:59:09 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1273/</guid> 
<description>
<![CDATA[ 
	<a href="attachment.php?fid=260">点击这里下载文件</a><br/><br/>pip install selenium<br/><br/>pip install pymysql<br/><br/>taskschd.msc<br/><br/><a href="https://www.python.org/ftp/python/3.10.7/python-3.10.7-amd64.exe" target="_blank">https://www.python.org/ftp/python/3.10.7/python-3.10.7-amd64.exe</a><br/><br/><a href="https://googlechromelabs.github.io/chrome-for-testing/" target="_blank">https://googlechromelabs.github.io/chrome-for-testing/</a><br/><br/><br/><a href="attachment.php?fid=261">点击这里下载文件</a><br/><br/>=====逆向=========<br/>pip install pyExecJs<br/><br/>pip install curl_cffi<br/><br/>pip install lxml<br/><br/>pip install loguru
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1272/</link>
<title><![CDATA[python]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 16 Nov 2023 23:58:20 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1272/</guid> 
<description>
<![CDATA[ 
	https://googlechromelabs.github.io/chrome-for-testing/
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1271/</link>
<title><![CDATA[tinyproxy 安装教程]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 14 Nov 2023 15:09:59 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1271/</guid> 
<description>
<![CDATA[ 
	1，环境介绍：<br/><br/>OS：CentOS Linux release 7.6.1810 (Core)<br/><br/>tinyproxy 版本：Release 1.11.1&nbsp;&nbsp;ps:1.10版本后支持设置用户密码，类似squid<br/><br/>2，安装步骤，配置文件，启动：<br/><br/>官网及下载地址：​​​​​​<br/><br/>​<a href="https://github.com/tinyproxy/tinyproxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" target="_blank">https://github.com/tinyproxy/tinyproxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>​<br/><br/><a href="https://github.com/tinyproxy/tinyproxy/releases/tag/1.11.1" target="_blank">https://github.com/tinyproxy/tinyproxy/releases/tag/1.11.1</a><br/><br/><a href="https://github.com/tinyproxy/tinyproxy/releases/download/1.11.1/tinyproxy-1.11.1.tar.gz" target="_blank">https://github.com/tinyproxy/tinyproxy/releases/download/1.11.1/tinyproxy-1.11.1.tar.gz</a><br/><div class="code"><br/>wget https://github.com/tinyproxy/tinyproxy/releases/download/1.11.1/tinyproxy-1.11.1.tar.gz<br/></div><br/><br/>解压，安装：<br/><div class="code"><br/>tar xvpf tinyproxy-1.11.1.tar.gz<br/> <br/>cd tinyproxy-1.11.1<br/> <br/>./autogen.sh<br/> <br/>./configure<br/>make<br/>make install<br/></div><br/>执行后会产生可执行程序：/usr/local/bin/tinyproxy 配置文件：/usr/local/etc/tinyproxy/tinyproxy.conf<br/><br/>默认的配置文件可以不管，我们创建自定义的配置文件 tinyproxy.conf，只需要简单配置几个核心参数即可：<br/><div class="code"><br/>mkdir /etc/tinyproxy/<br/>vi /etc/tinyproxy/tinyproxy.conf<br/></div><br/><div class="code"> <br/># 用户和组<br/>User nobody<br/>Group nobody<br/> <br/># 监听端口<br/>Port 8888<br/> <br/># 在多网卡的情况下，设置出口 IP 是否与入口 IP 相同。默认情况下是关闭的<br/>BindSame yes<br/> <br/># 超时时间<br/>Timeout 30<br/> <br/># 这个地方建议建立一个空文件给到报错时读取的文件模板，默认的模板会打印tinyproxy等信息，其他人可以通过输入错误认证信息得到tinyproxy代理服务名字，版本等。<br/>DefaultErrorFile &quot;/usr/local/share/tinyproxy/default_nooutput.html&quot;<br/>#DefaultErrorFile &quot;/usr/local/share/tinyproxy/default.html&quot;<br/>#该选项配置被当作统计主机的主机名或者IP地址：每当收到对该主机的请求时，Tinyproxy 会返回内部统计信息页面，而不会将请求转发给该主机。此页面的模板可以使用 StatFile 配置项进行配置。StatHost 的默认值为 tinyproxy.stats。<br/>StatHost &quot;127.0.0.1&quot;<br/>StatFile &quot;/usr/local/share/tinyproxy/stats.html&quot;<br/> <br/># 指定日志位置<br/>LogFile &quot;/var/log/tinyproxy/tinyproxy.log&quot;<br/> <br/>LogLevel Info<br/> <br/># 设置最大客户端链接数<br/>MaxClients 1024<br/> <br/>#RFC 2616 要求代理将 Via 标头添加到 HTTP 请求中，但使用真实主机名可能会引起安全问题。 如果设置了 ViaProxyName 选项，其字符串值将用作 Via 标头中的主机名。 否则，将使用服务器的主机名。<br/>ViaProxyName &quot;baidu&quot;<br/> <br/># 将此选项设置为Yes将通知Tinyproxy将包含客户端IP地址的标头X-Tinyproxy添加到请求中。<br/># 如果是yes 则在header头中会添加原始ip，非高匿名模式，默认是 no<br/># 如果是yes 代理提交出去的header中会包含：&quot;X-Tinyproxy&quot;: &quot;127.0.0.1&quot;<br/>XTinyproxy no<br/># 该选项设置为 yes 时，Tinyproxy 不会将 Via 标头添加到请求中。 这实际上就使 Tinyproxy 进入了隐身模式。请注意，RFC 2616 要求代理设置 Via 头，因此启用此选项会破坏合规性。 除非您知道自己在做什么，否则不要禁用 Via 标头...<br/># 默认是 no ，遵循了RFC 2616协议，代理需要带上头说明自己是代理服务过来的请求<br/># 如果是 no 代理提交出去的header中会包含：&quot;Via&quot;: &quot;1.1 xxxx (tinyproxy/1.11.1)&quot;<br/>DisableViaHeader yes<br/>#以上两条修改后就能做到高匿名<br/> <br/># 权限校验<br/>BasicAuth xxx yyy<br/></div><br/>设置启动脚本：<br/><div class="code"> <br/>vi /usr/bin/tp<br/></div><br/><div class="code">&nbsp;&nbsp;<br/>#!/bin/bash<br/>if &#91; $# -lt 1 &#93;<br/>then<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;No Args Input...&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit ;<br/>fi<br/>case $1 in<br/>&quot;start&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot; =================== 启动 ===================&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nohup tinyproxy -d -c /etc/tinyproxy/tinyproxy.conf &gt; /dev/null 2&gt;&amp;1 &amp;<br/>;;<br/>&quot;stop&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot; =================== 关闭 ===================&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps -ef&#124;grep tinyproxy&#124;grep -v grep&#124;awk &#039;&#123;print &quot;kill -9 &quot;$2&#125;&#039;&#124;sh<br/>;;<br/>&quot;restart&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot; =================== 重启 ===================&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps -ef&#124;grep tinyproxy&#124;grep -v grep&#124;awk &#039;&#123;print &quot;kill -9 &quot;$2&#125;&#039;&#124;sh<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nohup tinyproxy -d -c /etc/tinyproxy/tinyproxy.conf &gt; /dev/null 2&gt;&amp;1 &amp;<br/>;;<br/>&quot;status&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot; =================== 状态 ===================&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps -ef&#124;grep tinyproxy&#124;grep -v grep<br/>;;<br/>*)<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Input Args Error...&quot;<br/>;;<br/>esac<br/></div><br/>设置权限：<br/><div class="code"> <br/>chmod 777 /usr/bin/tp<br/></div><br/>启动控制：<br/><div class="code"> <br/>tp start<br/>tp stop<br/>tp status<br/>tp restart<br/></div><br/>查看日志：<br/><div class="code"> <br/>tail -f /var/log/tinyproxy/tinyproxy.log<br/></div><br/>3，正式测试：<br/><br/>在另一台公网ip机器上用curl测试，成功没有显示任何代理信息，真正做到了http协议的 高匿名+账号密码验证 代理服务：<br/><br/>​<div class="code"> <br/>curl -x http://xxx:yyy@xxx.xxx.xxx.xxx:8888 http://httpbin.org/get?show_env=1<br/></div>&nbsp;&nbsp;<br/><div class="code">&nbsp;&nbsp;<br/>&#123;<br/>&nbsp;&nbsp;&quot;args&quot;: &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;show_env&quot;: &quot;1&quot;<br/>&nbsp;&nbsp;&#125;, <br/>&nbsp;&nbsp;&quot;headers&quot;: &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;Accept&quot;: &quot;*/*&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;Host&quot;: &quot;httpbin.org&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;User-Agent&quot;: &quot;curl/7.29.0&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;X-Amzn-Trace-Id&quot;: &quot;Root=2-6361231232a-2a123d67c1231231231644946e55a&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;X-Forwarded-For&quot;: &quot;xxx.xxx.xxx.xxx&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;X-Forwarded-Port&quot;: &quot;80&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;X-Forwarded-Proto&quot;: &quot;http&quot;<br/>&nbsp;&nbsp;&#125;, <br/>&nbsp;&nbsp;&quot;origin&quot;: &quot;xxx.xxx.xxx.xxx&quot;, <br/>&nbsp;&nbsp;&quot;url&quot;: &quot;http://httpbin.org/get?show_env=1&quot;<br/>&#125;<br/></div><br/>设置无需认证的代理，则把 tinyproxy.conf的最后一行注释即可。<br/><div class="code"><br/>BasicAuth xxx yyy<br/></div><br/>做代理转发，则在tinyproxy.conf最后加上一行<br/><div class="code"><br/>upstream http user:pass@host:port<br/></div><br/>4，参考资料：<br/><br/>Tinyproxy安装与配置(ip代理) - 林先生<br/><br/><a href="http://httpbin.org/get?show_env=1" target="_blank">http://httpbin.org/get?show_env=1</a><br/><br/>TinyProxy 使用帮助 - 简书<br/><br/>​​<a href="https://github.com/tinyproxy/tinyproxy" target="_blank">https://github.com/tinyproxy/tinyproxy</a>​<br/><br/>================================<br/><br/>版本二<br/>1.安装TinyProxy<br/><div class="code"><br/>yum install -y epel-release<br/><br/>yum update -y ——升级yum,可能会等很长一段时间<br/><br/>yum install -y tinyproxy<br/></div><br/>2.配置TinyProxy<br/>（1）vi /etc/tinyproxy/tinyproxy.conf修改两处配置：端口号和允许连接该代理的IP白名单：<br/>默认用8888端口作为代理端口，可以修改为你用作代理端口的端口号；<br/><br/>允许访问该代理端口的IP，默认为只有本机可以使用该代理，把这行注释掉可以使所有IP都可以使用该代理。<br/><br/>（2）配置完后，重启TinyProxy<br/><div class="code"><br/>systemctl enable tinyproxy.service<br/><br/>systemctl restart tinyproxy.service<br/></div><br/>防火墙开放你的配置的代理端口：<br/><div class="code"><br/>iptables -I INPUT -p tcp --dport 8888 -j ACCEPT<br/></div><br/>3.验证TinyProxy<br/>在另一台主机上运行以下命令检查是否用了代理：<br/><br/>curl -x 代理服务器IP地址:代理端口 httpbin.org/get<br/>访问httpbin.org/get得到本地IP为119.23.xx.x，通过代理端口访问该地址，得到的IP地址为114.104.xx.x，这说明代理搭建成功。<br/>systemctl start tinyproxy #启动服务systemctl stop tinyporxy # 关闭服务systemctl restart tinyporxy # 重启服务systemctl enable tinyproxy # 添加到开机启动systemctl disable tinyproxy # 移除开机启动<br/><br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1270/</link>
<title><![CDATA[Python解决SSL不可用问题]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 11 Nov 2023 02:51:14 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1270/</guid> 
<description>
<![CDATA[ 
	一、问题描述：<br/>报错概述：<br/><div class="code"><br/>WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.<br/>## 警告:pip配置了需要TLS/SSL的位置，但是Python中的SSL模块不可用。<br/></div><br/>二、解决方案：<br/>首先要明白python版本需要和openssl的版本需要相对匹配的，在Python3.7之后的版本，依赖的openssl，必须要是1.1或者1.0.2之后的版本，或者安装了2.6.4之后的libressl，linux自带的openssl版本过低。<br/>1、查看liunx系统的openssl版本信息：<br/><div class="code"><br/>openssl version<br/></div><br/>如图所示：小编的买的liunx服务器自带的openssl版本为1.1.1a ，然而对于小编来说，要安装python3.10的版本来说，openssl的版本太低了，因此需要更新openssl的版本才能满足要求；<br/>先卸载之前安装的旧版本<br/><div class="code"><br/>yum -y remove openssl openssl-devel<br/></div><br/>2、更新openssl版本：<br/>（1）安装相关依赖<br/><div class="code"><br/>yum install gcc libffi-devel zlib* openssl-devel<br/>yum -y install perl-IPC-Cmd<br/></div><br/><div class="code"><br/>安装perl-CPAN<br/><br/>&#91;root@centos7 ~&#93;# yum install -y perl-CPAN<br/>进入CPAN的shell模式，首次进入需要配置shell，按照提示操作即可（本人perl小白，全部选择默认配置，高手请根据提示自行选择）<br/><br/>&#91;root@centos7 ~&#93;# perl -MCPAN -e shell<br/>在shell中安装缺少的模块<br/><br/>cpan&#91;1&#93;&gt; install IPC/Cmd.pm<br/>安装成功后，重新编译OpenSSL即可<br/></div><br/>（2）官网下载openssl版本<br/><div class="code"><br/>wget https://www.openssl.org/source/openssl-3.0.1.tar.gz<br/></div><br/>（3）解压openssl<br/><div class="code"><br/>tar -zxvf openssl-3.0.1.tar.gz<br/></div><br/>（4）编译openssl<br/># 进入解压后的文件目录，切记一定要进入该目录才能继续执行后续命令<br/><div class="code"><br/> cd openssl-3.0.1<br/></div><br/>其中--prefix是指定安装目录的，shared zlib库是在安装时寻找zlib库依赖的<br/><br/># 配置(configure)<br/><div class="code"><br/>./config --prefix=/usr/local/openssl<br/></div><br/><br/># 编译<br/><div class="code"><br/>make <br/></div><br/># 安装<br/><div class="code"><br/>make install<br/></div><br/>最后重新查看openssl版本<br/><div class="code"><br/>openssl version<br/></div><br/><br/>#建立新的软链接<br/><div class="code"><br/>ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl<br/>ln -s /usr/local/openssl/include/openssl /usr/include/openssl<br/></div><br/>#更新动态链接库<br/><div class="code"><br/>echo &quot;/usr/local/openssl/lib64&quot; &gt;&gt; /etc/ld.so.conf<br/>ldconfig -v<br/>ldd /usr/local/openssl/bin/openssl<br/></div><br/>==========================<br/><br/>2、重新编译python<br/>安装依赖<br/><div class="code"><br/>yum -y update<br/>yum -y install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel<br/></div><br/>（1）官网下载python<br/><div class="code"><br/>wget https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz<br/><br/></div><br/><br/>（2）解压python<br/><div class="code"><br/>tar -xzvf Python-3.10.5.tgz<br/></div><br/><br/>（3）编译 python<br/><div class="code"><br/>./configure --with-ssl --prefix=/usr/local/python3/<br/></div><br/><div class="code"><br/>make &amp;&amp; make install <br/></div><br/><br/>4）建立软连接<br/><div class="code"><br/>sudo ln -sf /usr/local/python3/bin/python3.10 /usr/bin/python<br/>sudo ln -sf /usr/local/python3/bin/python3.10 /usr/bin/python3<br/>sudo ln -sf /usr/local/python3/bin/pip3.10 /usr/bin/pip<br/>sudo ln -sf /usr/local/python3/bin/pip3.10 /usr/bin/pip3<br/></div><br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1269/</link>
<title><![CDATA[centos7 防火墙添加移除规则练习]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 26 Oct 2023 02:00:12 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1269/</guid> 
<description>
<![CDATA[ 
	查看防火墙是否开启<br/><br/><br/>systemctl start friewall.service<br/><br/>//开启防火墙<br/><br/>firewall-cmd --state<br/><br/>//查询防火墙运行状态<br/>firewall-cmd --list-all<br/><br/>添加防火墙规则<br/>放行单个端口<br/>firewall-cmd --permanent --add-port=80/tcp<br/><br/>//开放80端口，允许外面访问<br/><br/>放行某一段端口号<br/>firewall-cmd --permanent --zone=public --add-port=1000-2000/tcp<br/><br/>firewall-cmd --reload<br/><br/>放行某个ip进行访问<br/>firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 accept'<br/><br/>firewall-cmd --reload<br/><br/>放行某段IP进行访问<br/>firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 accept'<br/><br/>禁止某个ip进行访问<br/>firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.42 drop'<br/><br/>firewall-cmd --reload<br/><br/>放行某个ip访问某个端口<br/>firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 port protocol=tcp port=6379 accept'<br/><br/>firewall-cmd --reload<br/><br/>移除防火墙规则<br/>移除一条规则<br/>firewall-cmd --permanent --remove-port=80/tcp<br/><br/>firewall-cmd --reload<br/><br/>移除以上规则<br/>firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.169" port port="6379" protocol="tcp" accept'<br/><br/>firewall-cmd --reload<br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1268/</link>
<title><![CDATA[代理服务器搭建]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 30 Aug 2023 00:44:59 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1268/</guid> 
<description>
<![CDATA[ 
	购买一个腾讯轻量云或者阿里轻量云。推荐选择香港。系统镜像必须centos7.6&nbsp;&nbsp; 千万别选错，别的不用修改 都选默认，买一个月24块钱的.<br/>打开购买的轻量云<br/>阿里先把防火墙端口添加全部tcp+udp协议端口<br/>腾讯防火墙添加的是全部all端口<br/>然后运行云服务器（远程连接服务器）<br/>输入：<div class="code">sudo su root</div><br/>按下回车<br/>输入：<div class="code">wget --no-check-certificate https://raw.github.com/Lozy/danted/master/install.sh -O install.sh</div><br/>按下回车<br/>输入：<div class="code">bash install.sh --port=8888 --user=123123 --passwd=123123</div><br/>按下回车<br/>5.等他安装完<br/>出现绿字就ok了<br/>6.sk5就是43.133.172.82&#124;8888&#124;123123&#124;123123<br/>7.安装完yo找个代理软件测试下
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1266/</link>
<title><![CDATA[chatGPT代理服务器搭建]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 14 Jun 2023 06:35:35 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1266/</guid> 
<description>
<![CDATA[ 
	chatGPT代理服务器搭建<br/><div class="code"><br/>yum -y install wget<br/><br/>wget http://soft.vpser.net/lnmp/lnmp1.9-full.tar.gz<br/><br/>tar -zxvf lnmp1.9-full.tar.gz<br/><br/>cd lnmp1.9-full<br/><br/>./install.sh nginx<br/></div><br/><br/>生成证书<br/><br/><div class="code"><br/>cd /usr/local<br/><br/>mkdir secret<br/><br/>cd secret<br/><br/>openssl genrsa -out private.key 2048<br/><br/>openssl req -new -key private.key -out server.csr<br/><br/>openssl x509 -req -days 3650 -in server.csr -signkey private.key -out server.crt<br/></div><br/><br/>修改nginx.conf内容为<br/><div class="code"><br/>#user&nbsp;&nbsp;nobody;<br/>worker_processes&nbsp;&nbsp;1;<br/><br/><br/>events &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;worker_connections&nbsp;&nbsp;1024;<br/>&#125;<br/><br/><br/>http &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mime.types;<br/>&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;&nbsp;application/octet-stream;<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp; on;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#keepalive_timeout&nbsp;&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout&nbsp;&nbsp;65;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#gzip&nbsp;&nbsp;on;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 443 ssl ;&nbsp;&nbsp;#监听端口号<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;api.abc.com;&nbsp;&nbsp;#域名或服务器ip<br/>&nbsp;&nbsp;&nbsp;&nbsp;proxy_read_timeout 240s; #设置超时时间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/secret/server.crt;&nbsp;&nbsp;#对应前面生成密钥的位置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate_key&nbsp;&nbsp;/usr/local/secret/private.key;&nbsp;&nbsp;#对应前面生成密钥的位置<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#charset koi8-r;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/host.access.log&nbsp;&nbsp;main;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location /v1/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass https://api.openai.com; # 反向代理到https://api.openai.com/这个地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header Host api.openai.com; # 设置代理请求头中的Host字段为api.openai.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_ssl_server_name on;&nbsp;&nbsp;# 开启代理SSL服务器名称验证，确保SSL连接的安全性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp; 500 502 503 504&nbsp;&nbsp;/50x.html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location = /50x.html &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/><br/>&#125;<br/><br/></div><br/><br/>chatGPT的接口地址换成：<a href="https://api.abc.com/v1/chat/completions" target="_blank">https://api.abc.com/v1/chat/completions</a> 即可
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1264/</link>
<title><![CDATA[PHP调试代码]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[代码编程]]></category>
<pubDate>Sun, 02 Apr 2023 15:04:41 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1264/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>error_reporting(E_ALL);<br/>//禁止把错误输出到页面<br/>ini_set(&#039;display_errors&#039;, 0);<br/>//设置错误信息输出到文件<br/>ini_set(&#039;log_errors&#039;, 1);<br/>//指定错误日志文件名<br/>$error_dir = AMY_ROOT.&#039;/data/log/&#039;;<br/>$error_file = $error_dir . date(&#039;Ymd&#039;).&#039;.log&#039;;<br/>//目录不存在就创建<br/>if (!is_dir($error_dir))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;mkdir($error_dir, 0777, true);<br/>&#125;<br/>//文件不存在就创建之<br/>if(!file_exists($error_file))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$fp = fopen($error_file, &#039;w+&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($fp)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>//设置错误输出文件<br/>ini_set(&quot;error_log&quot;, $error_file);<br/>//程序正常执行逻辑......<br/></div>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/1263/</link>
<title><![CDATA[函数对照]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 18 Feb 2023 07:47:08 +0000</pubDate> 
<guid>http://www.dzhope.com/post/1263/</guid> 
<description>
<![CDATA[ 
	daddslashes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amy_addslashes<br/>dstripslashes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; amy_stripslashes<br/>dhtmlspecialchars&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amy_htmlspecialchars<br/>dsafe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; amy_safe<br/>
]]>
</description>
</item>
</channel>
</rss>