{"id":9818,"date":"2025-04-18T17:37:36","date_gmt":"2025-04-18T09:37:36","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/9818.html"},"modified":"2025-04-18T17:37:36","modified_gmt":"2025-04-18T09:37:36","slug":"nginx-%e4%b8%8e-flask-%e6%90%ad%e5%bb%ba-http-https-%e6%9c%8d%e5%8a%a1%e5%99%a8","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/9818.html","title":{"rendered":"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668"},"content":{"rendered":"<\/p>\n<h4>Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668<\/h4>\n<ul>\n<li>\u73af\u5883\u642d\u5efa<\/li>\n<li>\n<ul>\n<li>1\u3001Nginx \u5b89\u88c5<\/li>\n<li>2\u3001Flask \u5b89\u88c5<\/li>\n<li>3\u3001OpenSSL \u751f\u6210 https \u6240\u9700\u79d8\u94a5\u4e0e\u8bc1\u4e66<\/li>\n<li>4\u3001\u914d\u7f6e Nginx \u4ee3\u7406\u5230 Flask<\/li>\n<li>5\u3001\u91cd\u542f Nginx \u670d\u52a1<\/li>\n<li>6\u3001Flask Demo \u7a0b\u5e8f<\/li>\n<li>7\u3001\u670d\u52a1\u5668\u5f00\u673a\u81ea\u542f\u52a8<\/li>\n<li>8\u3001\u7b80\u5355\u7684\u7f51\u9875\u670d\u52a1\u5668<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u73af\u5883\u642d\u5efa<\/h2>\n<h3>1\u3001Nginx \u5b89\u88c5<\/h3>\n<p><span class=\"token function\">sudo<\/span> <span class=\"token function\">apt<\/span> <span class=\"token function\">install<\/span> nginx<\/p>\n<p>\u5b89\u88c5\u5b8c\u6bd5&#xff0c;\u6d4f\u89c8\u5668\u6216\u8005curl\u8bbf\u95ee http:\/\/&lt;Nginx\u670d\u52a1\u5668IP&gt; &#xff0c;\u6d4b\u8bd5Nginx\u670d\u52a1\u662f\u5426\u6b63\u5e38\u3002<\/p>\n<h3>2\u3001Flask \u5b89\u88c5<\/h3>\n<p><span class=\"token comment\"># \u5b89\u88c5 python3 \u4e0e pip3 \u5de5\u5177<\/span><br \/>\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">apt<\/span> <span class=\"token function\">install<\/span> python3 python3-pip<br \/>\n<span class=\"token comment\"># \u4f7f\u7528 pip3 \u5b89\u88c5 flask<\/span><br \/>\npip3 <span class=\"token function\">install<\/span> flask<\/p>\n<h3>3\u3001OpenSSL \u751f\u6210 https \u6240\u9700\u79d8\u94a5\u4e0e\u8bc1\u4e66<\/h3>\n<p><span class=\"token comment\"># \u521b\u5efa\u4e00\u4e2a\u79c1\u94a5<\/span><br \/>\n<span class=\"token function\">sudo<\/span> openssl genrsa -des3 -out server.key <span class=\"token number\">2048<\/span><br \/>\n<span class=\"token comment\"># \u79fb\u9664\u79c1\u94a5\u4e2d\u7684\u5bc6\u7801\u77ed\u8bed&#xff08;\u53ef\u9009&#xff0c;\u4f46\u63a8\u8350\u5728\u6d4b\u8bd5\u73af\u5883\u4e2d\u8fd9\u6837\u505a&#xff09;<\/span><br \/>\n<span class=\"token function\">sudo<\/span> openssl rsa -in server.key -out server_no_pass.key<br \/>\n<span class=\"token comment\"># \u751f\u6210\u81ea\u7b7e\u540d\u8bc1\u4e66\u8bf7\u6c42<\/span><br \/>\n<span class=\"token function\">sudo<\/span> openssl req -new -key server_no_pass.key -out server.csr<br \/>\n<span class=\"token comment\"># \u751f\u6210\u81ea\u7b7e\u540d\u8bc1\u4e66&#xff0c;\u6709\u6548\u671f\u4e3a 365 \u5929 <\/span><br \/>\n<span class=\"token function\">sudo<\/span> openssl x509 -req -days <span class=\"token number\">365<\/span> -in server.csr -signkey server_no_pass.key -out server.crt<\/p>\n<h3>4\u3001\u914d\u7f6e Nginx \u4ee3\u7406\u5230 Flask<\/h3>\n<p>\u5907\u4efd \/etc\/nginx\/sites-available\/default \u6587\u4ef6&#xff0c;\u8d85\u7ea7\u6743\u9650\u4fee\u6539 default \u6587\u4ef6&#xff0c;\u652f\u6301 http\/https \u4ee3\u7406\u3002<\/p>\n<p><span class=\"token comment\"># \u5907\u4efd Nginx \u914d\u7f6e\u6587\u4ef6<\/span><br \/>\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">cp<\/span> \/etc\/nginx\/sites-available\/default \/etc\/nginx\/sites-available\/default.bak<br \/>\n<span class=\"token comment\"># \u914d\u7f6e\u4ee3\u7406<\/span><br \/>\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">vim<\/span> \/etc\/nginx\/sites-available\/default<\/p>\n<p>\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\u81f3 default \u6587\u4ef6<\/p>\n<p>server <span class=\"token punctuation\">{<\/span><br \/>\n    listen <span class=\"token number\">80<\/span> default_server<span class=\"token punctuation\">;<\/span><br \/>\n    listen <span class=\"token punctuation\">[<\/span>::<span class=\"token punctuation\">]<\/span>:80 default_server<span class=\"token punctuation\">;<\/span><br \/>\n    server_name localhost.linux<span class=\"token punctuation\">;<\/span><\/p>\n<p>    location \/ <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\"># \u4ee3\u7406\u5230 Flask \u5e94\u7528<\/span><br \/>\n        proxy_pass http:\/\/localhost:5000<span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header Host <span class=\"token variable\">$host<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Real-IP <span class=\"token variable\">$remote_addr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Forwarded-For <span class=\"token variable\">$proxy_add_x_forwarded_for<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Forwarded-For <span class=\"token variable\">$proxy_add_x_forwarded_for<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Forwarded-Proto <span class=\"token variable\">$scheme<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>server <span class=\"token punctuation\">{<\/span><br \/>\n    listen <span class=\"token number\">443<\/span> ssl<span class=\"token punctuation\">;<\/span><br \/>\n    server_name localhost.linux<span class=\"token punctuation\">;<\/span>  <\/p>\n<p>    <span class=\"token comment\"># SSL \u914d\u7f6e&#xff0c;\u5305\u62ec\u8bc1\u4e66\u548c\u79c1\u94a5  <\/span><br \/>\n    ssl_certificate \/etc\/nginx\/certificate\/server.crt<span class=\"token punctuation\">;<\/span><br \/>\n    ssl_certificate_key \/etc\/nginx\/certificate\/server_no_pass.key<span class=\"token punctuation\">;<\/span><br \/>\n    ssl_protocols TLSv1.2 TLSv1.3<span class=\"token punctuation\">;<\/span><br \/>\n    ssl_ciphers HIGH:<span class=\"token operator\">!<\/span>aNULL:<span class=\"token operator\">!<\/span>MD5<span class=\"token punctuation\">;<\/span><br \/>\n    ssl_prefer_server_ciphers on<span class=\"token punctuation\">;<\/span><br \/>\n    location \/ <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\"># \u4ee3\u7406\u5230 Flask \u5e94\u7528<\/span><br \/>\n        proxy_pass http:\/\/127.0.0.1:5000<span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header Host <span class=\"token variable\">$host<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Real-IP <span class=\"token variable\">$remote_addr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Forwarded-For <span class=\"token variable\">$proxy_add_x_forwarded_for<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        proxy_set_header X-Forwarded-Proto <span class=\"token variable\">$scheme<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>5\u3001\u91cd\u542f Nginx \u670d\u52a1<\/h3>\n<p><span class=\"token comment\"># \u91cd\u542f Nginx \u670d\u52a1<\/span><br \/>\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">service<\/span> nginx reload<br \/>\n<span class=\"token comment\"># \u6216\u8005\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4<\/span><br \/>\n<span class=\"token function\">sudo<\/span> nginx -s reload<\/p>\n<h3>6\u3001Flask Demo \u7a0b\u5e8f<\/h3>\n<ul>\n<li>\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u521b\u5efa demo.py \u6d4b\u8bd5 Flask \u670d\u52a1\u5668<span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Flask<span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">,<\/span> render_template<span class=\"token punctuation\">,<\/span> jsonify<span class=\"token punctuation\">,<\/span> Response<br \/>\n<span class=\"token keyword\">from<\/span> werkzeug<span class=\"token punctuation\">.<\/span>middleware<span class=\"token punctuation\">.<\/span>proxy_fix <span class=\"token keyword\">import<\/span> ProxyFix<\/p>\n<p>app <span class=\"token operator\">&#061;<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u5e94\u7528 ProxyFix \u4e2d\u95f4\u4ef6\u6765\u4fee\u590d\u4ee3\u7406\u73af\u5883\u4e2d\u7684\u8bf7\u6c42\u4fe1\u606f&#xff0c;\u6ca1\u6709\u8be5\u884c\u5185\u5bb9\u5219Flask\u83b7\u53d6\u7684\u8bf7\u6c42IP \u4e3a Nginx \u4ee3\u7406 ip 127.0.0.1<\/span><br \/>\napp<span class=\"token punctuation\">.<\/span>wsgi_app <span class=\"token operator\">&#061;<\/span> ProxyFix<span class=\"token punctuation\">(<\/span>app<span class=\"token punctuation\">.<\/span>wsgi_app<span class=\"token punctuation\">,<\/span> x_for<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> x_host<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> x_proto<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;PUT&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u6253\u5370\u8bf7\u6c42\u5934<\/span><br \/>\n    headers <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>headers<br \/>\n    <span class=\"token keyword\">for<\/span> header<span class=\"token punctuation\">,<\/span> value <span class=\"token keyword\">in<\/span> headers<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>header<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>value<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6253\u5370\u8bf7\u6c42 IP<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>request<span class=\"token punctuation\">.<\/span>remote_addr<span class=\"token punctuation\">)<\/span><br \/>\n    xml_string <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;html&gt;&lt;h1&gt;Flask Demo&lt;\/h1&gt;&lt;p&gt;\u8fd9\u662f\u4e00\u4e2aFlask APP \u793a\u4f8b&lt;\/p&gt;&lt;\/html&gt;&#039;<\/span><br \/>\n    response <span class=\"token operator\">&#061;<\/span> Response<span class=\"token punctuation\">(<\/span>xml_string<span class=\"token punctuation\">,<\/span> status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> response<\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;flask starting &#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span> flush<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\napp<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span>debug<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\"># \u5982\u679c\u4e0d\u4f7f\u7528 5000\u7aef\u53e3&#xff0c;\u53ef\u4ee5\u4f7f\u7528 port&#061;1234\u5207\u6362\u7aef\u53e3<\/span>\n <\/li>\n<li>\u6267\u884c demo \u6d4b\u8bd5\u6548\u679c<span class=\"token comment\"># \u8fd0\u884c demo<\/span><br \/>\npython3 demo.py <span class=\"token operator\">&amp;<\/span><br \/>\n<span class=\"token comment\"># curl get \u5185\u5bb9<\/span><br \/>\n<span class=\"token function\">curl<\/span> -X GET http:\/\/127.0.0.1\n <\/li>\n<\/ul>\n<h3>7\u3001\u670d\u52a1\u5668\u5f00\u673a\u81ea\u542f\u52a8<\/h3>\n<ul>\n<li>\u5728 python \u4ee3\u7801\u6240\u5728\u76ee\u5f55\u521b\u5efa start.shpython3 ~\/nginx\/autopic\/demo.py <span class=\"token operator\">&amp;<\/span>\n <\/li>\n<li>\u4f7f\u7528 cron \u5f00\u673a\u6267\u884c\u4efb\u52a1<span class=\"token function\">crontab<\/span> -e<br \/>\n<span class=\"token comment\"># flask \u5f00\u673a\u81ea\u542f\u52a8 \u4ee5\u7edd\u5bf9\u8def\u5f84\u542f\u52a8\u670d\u52a1&#xff0c;\u4fdd\u8bc1\u65e5\u5fd7\u5728\u9884\u671f\u76ee\u5f55\u751f\u6210<\/span><br \/>\n&#064;reboot <span class=\"token builtin class-name\">cd<\/span> \/home\/username\/nginx\/autopic <span class=\"token operator\">&amp;&amp;<\/span> \/home\/username\/nginx\/autopic\/start.sh\n <\/li>\n<\/ul>\n<h3>8\u3001\u7b80\u5355\u7684\u7f51\u9875\u670d\u52a1\u5668<\/h3>\n<p><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Flask<span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">,<\/span> render_template<span class=\"token punctuation\">,<\/span> jsonify<span class=\"token punctuation\">,<\/span> Response<span class=\"token punctuation\">,<\/span> send_from_directory<span class=\"token punctuation\">,<\/span>send_file<span class=\"token punctuation\">,<\/span>abort<br \/>\n<span class=\"token keyword\">from<\/span> pathlib <span class=\"token keyword\">import<\/span> Path<br \/>\n<span class=\"token keyword\">from<\/span> werkzeug<span class=\"token punctuation\">.<\/span>middleware<span class=\"token punctuation\">.<\/span>proxy_fix <span class=\"token keyword\">import<\/span> ProxyFix<br \/>\n<span class=\"token keyword\">import<\/span> xml<span class=\"token punctuation\">.<\/span>etree<span class=\"token punctuation\">.<\/span>ElementTree <span class=\"token keyword\">as<\/span> ET <span class=\"token comment\"># xml<\/span><br \/>\n<span class=\"token keyword\">import<\/span> logging<br \/>\n<span class=\"token keyword\">import<\/span> jwt<br \/>\n<span class=\"token keyword\">import<\/span> datetime<br \/>\n<span class=\"token keyword\">import<\/span> secrets<br \/>\n<span class=\"token keyword\">import<\/span> os<br \/>\n<span class=\"token keyword\">import<\/span> base64<br \/>\n<span class=\"token keyword\">from<\/span> xml<span class=\"token punctuation\">.<\/span>etree <span class=\"token keyword\">import<\/span> ElementTree<br \/>\n<span class=\"token keyword\">import<\/span> binascii<br \/>\n<span class=\"token keyword\">import<\/span> timetool<br \/>\n<span class=\"token keyword\">import<\/span> master_camera<br \/>\n<span class=\"token keyword\">from<\/span> csvmode <span class=\"token keyword\">import<\/span> csv_file<\/p>\n<p><span class=\"token comment\"># \u914d\u7f6e \u6a21\u677f\u6587\u4ef6&#xff08;html&#xff09;\u76ee\u5f55\u4e3a html&#xff1b;\u540e\u7eed html \u6587\u4ef6\u653e\u5728\u5bf9\u5e94\u76ee\u5f55\u4e0b\u5373\u53ef<\/span><br \/>\napp <span class=\"token operator\">&#061;<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">,<\/span> template_folder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;html&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u5e94\u7528 ProxyFix \u4e2d\u95f4\u4ef6\u6765\u4fee\u590d\u4ee3\u7406\u73af\u5883\u4e2d\u7684\u8bf7\u6c42\u4fe1\u606f&#xff0c;\u6ca1\u6709\u8be5\u884c\u5185\u5bb9\u5219Flask\u83b7\u53d6\u7684\u8bf7\u6c42IP \u4e3a Nginx \u4ee3\u7406 ip 127.0.0.1<\/span><br \/>\napp<span class=\"token punctuation\">.<\/span>wsgi_app <span class=\"token operator\">&#061;<\/span> ProxyFix<span class=\"token punctuation\">(<\/span>app<span class=\"token punctuation\">.<\/span>wsgi_app<span class=\"token punctuation\">,<\/span> x_for<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> x_host<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> x_proto<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u914d\u7f6e\u65e5\u5fd7\u7cfb\u7edf<\/span><br \/>\nlog_file <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;app.log&#034;<\/span>  <span class=\"token comment\"># \u65e5\u5fd7\u6587\u4ef6\u540d<\/span><br \/>\nlogging<span class=\"token punctuation\">.<\/span>basicConfig<span class=\"token punctuation\">(<\/span><br \/>\n    filename<span class=\"token operator\">&#061;<\/span>log_file<span class=\"token punctuation\">,<\/span><br \/>\n    level<span class=\"token operator\">&#061;<\/span>logging<span class=\"token punctuation\">.<\/span>INFO<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token builtin\">format<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;%(asctime)s:%(levelname)s:%(message)s&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/xxx&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    xml_string <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;&lt;html&gt;&lt;h1&gt;Flask Demo&lt;\/h1&gt;&lt;p&gt;\u8fd9\u662f\u4e00\u4e2aFlask APP \u793a\u4f8b&lt;\/p&gt;&lt;p&gt;\u9634\u4e91\u4e0d\u853d\u6708&#xff0c;\u4f9d\u65e7\u7167\u6211\u5fc3\u3002\u4f55\u987b\u5ff5\u6851\u6893&#xff0c;\u5fc3\u5b89\u5373\u543e\u4e61\u3002&lt;\/p&gt;&lt;\/html&gt;&#034;<\/span><br \/>\n    response <span class=\"token operator\">&#061;<\/span> Response<span class=\"token punctuation\">(<\/span>xml_string<span class=\"token punctuation\">,<\/span> status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    logging<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span>xml_string<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> response<\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/home&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">home<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    logging<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/HOME&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token comment\"># \u524d\u9762\u521d\u59cb\u5316 Flask \u65f6\u914d\u7f6e\u4e86 template_folder &#xff0c;\u8bbf\u95ee\u7684 home\/index.html \u5728 html\/home\/index.html<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;home\/index.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">200<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/360&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">T360<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;test\/360.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">200<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/code&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">code_flask<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;code\/index.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">200<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/demo&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">demo_flask<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;demo\/index.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">200<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/about&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">about_flask<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;about\/index.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">200<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbe\u7f6e\u89c6\u9891\u6587\u4ef6\u7684\u76ee\u5f55<\/span><br \/>\nVIDEO_DIR <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;.&#039;<\/span><br \/>\nBASE_DIR <span class=\"token operator\">&#061;<\/span> Path<span class=\"token punctuation\">(<\/span>__file__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>resolve<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>parent<\/p>\n<p><span class=\"token comment\"># \u521b\u5efa\u4e00\u4e2a\u8def\u7531\u6765\u670d\u52a1\u89c6\u9891\u6587\u4ef6<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/&lt;path:filepath&gt;&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">serve_file<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u6784\u5efa\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84  <\/span><br \/>\n    file_path <span class=\"token operator\">&#061;<\/span> BASE_DIR <span class=\"token operator\">\/<\/span> filepath  <\/p>\n<p>    <span class=\"token comment\"># \u786e\u4fdd\u6587\u4ef6\u5b58\u5728\u4e14\u662f\u6587\u4ef6\u800c\u4e0d\u662f\u76ee\u5f55  <\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> file_path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> file_path<span class=\"token punctuation\">.<\/span>is_file<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        abort<span class=\"token punctuation\">(<\/span><span class=\"token number\">404<\/span><span class=\"token punctuation\">)<\/span>  <\/p>\n<p>    <span class=\"token comment\"># \u7981\u6b62\u8bbf\u95ee\u67d0\u4e9b\u654f\u611f\u76ee\u5f55\u6216\u6587\u4ef6  <\/span><br \/>\n    <span class=\"token comment\"># \u4f8b\u5982&#xff0c;\u4e0d\u5141\u8bb8\u8bbf\u95ee&#039;.env&#039;\u6587\u4ef6\u6216\u4efb\u4f55\u9690\u85cf\u6587\u4ef6  <\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">any<\/span><span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">.<\/span>parts<span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>startswith<span class=\"token punctuation\">(<\/span>prefix<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> prefix <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;.&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;_&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        abort<span class=\"token punctuation\">(<\/span><span class=\"token number\">403<\/span><span class=\"token punctuation\">)<\/span>  <\/p>\n<p>    <span class=\"token comment\"># \u4f7f\u7528send_file\u53d1\u9001\u6587\u4ef6  <\/span><br \/>\n    <span class=\"token comment\"># return send_file(str(file_path), as_attachment&#061;False, mimetype&#061;&#039;video\/mp4&#039;)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> send_file<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> as_attachment<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>errorhandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">404<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">page_not_found<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;404\/index.html&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">404<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u5728\u751f\u4ea7\u73af\u5883\u4e2d&#xff0c;\u5e94\u8be5\u4f7f\u7528 WSGI \u670d\u52a1\u5668&#xff08;\u5982Gunicorn&#xff09;\u548c\u53cd\u5411\u4ee3\u7406&#xff08;\u5982Nginx&#xff09;<\/span><br \/>\n    <span class=\"token comment\"># \u8fd9\u91cc\u4ec5\u7528\u4e8e\u5f00\u53d1\u548c\u6d4b\u8bd5\u76ee\u7684<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;flask starting &#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span> flush<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    app<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span>debug<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1k\u6b21\uff0c\u70b9\u8d5e21\u6b21\uff0c\u6536\u85cf6\u6b21\u3002\u5b89\u88c5\u5b8c\u6bd5\uff0c\u6d4f\u89c8\u5668\u6216\u8005\u3002_nginx\u4ee3\u7406flask<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[153,151,117],"topic":[],"class_list":["post-9818","post","type-post","status-publish","format-standard","hentry","category-server","tag-flask","tag-http","tag-nginx"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/9818.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1k\u6b21\uff0c\u70b9\u8d5e21\u6b21\uff0c\u6536\u85cf6\u6b21\u3002\u5b89\u88c5\u5b8c\u6bd5\uff0c\u6d4f\u89c8\u5668\u6216\u8005\u3002_nginx\u4ee3\u7406flask\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/9818.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-18T09:37:36+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/9818.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/9818.html\",\"name\":\"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2025-04-18T09:37:36+00:00\",\"dateModified\":\"2025-04-18T09:37:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/9818.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/9818.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/9818.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/9818.html","og_locale":"zh_CN","og_type":"article","og_title":"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1k\u6b21\uff0c\u70b9\u8d5e21\u6b21\uff0c\u6536\u85cf6\u6b21\u3002\u5b89\u88c5\u5b8c\u6bd5\uff0c\u6d4f\u89c8\u5668\u6216\u8005\u3002_nginx\u4ee3\u7406flask","og_url":"https:\/\/www.wsisp.com\/helps\/9818.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2025-04-18T09:37:36+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/9818.html","url":"https:\/\/www.wsisp.com\/helps\/9818.html","name":"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2025-04-18T09:37:36+00:00","dateModified":"2025-04-18T09:37:36+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/9818.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/9818.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/9818.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"Nginx \u4e0e Flask \u642d\u5efa HTTP\/HTTPS \u670d\u52a1\u5668"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/9818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=9818"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/9818\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=9818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=9818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=9818"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=9818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}