{"id":1706,"date":"2023-03-25T23:06:27","date_gmt":"2023-03-25T15:06:27","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1706"},"modified":"2023-04-23T21:40:56","modified_gmt":"2023-04-23T13:40:56","slug":"fastdfs-nginx-implement-distributed-file-server","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/25\/fastdfs-nginx-implement-distributed-file-server\/","title":{"rendered":"FastDFS &#038;&#038; Nginx\u5b9e\u73b0\u5206\u5e03\u5f0f\u6587\u4ef6\u670d\u52a1\u5668"},"content":{"rendered":"<p><code>FastDFS<\/code>\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u8f7b\u91cf\u7ea7\u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf\uff0c\u5b83\u5bf9\u6587\u4ef6\u8fdb\u884c\u7ba1\u7406\uff0c\u529f\u80fd\u5305\u62ec\uff1a\u6587\u4ef6\u5b58\u50a8\u3001\u6587\u4ef6\u540c\u6b65\u3001\u6587\u4ef6\u8bbf\u95ee\uff08\u6587\u4ef6\u4e0a\u4f20\u3001\u6587\u4ef6\u4e0b\u8f7d\uff09\u7b49\uff0c\u89e3\u51b3\u4e86\u5927\u5bb9\u91cf\u5b58\u50a8\u548c\u8d1f\u8f7d\u5747\u8861\u7684\u95ee\u9898\u3002\u7279\u522b\u9002\u5408\u4ee5\u6587\u4ef6\u4e3a\u8f7d\u4f53\u7684\u5728\u7ebf\u670d\u52a1\uff0c\u5982\u76f8\u518c\u7f51\u7ad9\u3001\u89c6\u9891\u7f51\u7ad9\u7b49\u7b49\u3002<\/p>\n<p><code>FastDFS<\/code>\u4e3a\u4e92\u8054\u7f51\u91cf\u8eab\u5b9a\u5236\uff0c\u5145\u5206\u8003\u8651\u4e86\u5197\u4f59\u5907\u4efd\u3001\u8d1f\u8f7d\u5747\u8861\u3001\u7ebf\u6027\u6269\u5bb9\u7b49\u673a\u5236\uff0c\u5e76\u6ce8\u91cd\u9ad8\u53ef\u7528\u3001\u9ad8\u6027\u80fd\u7b49\u6307\u6807\uff0c\u4f7f\u7528<code>FastDFS<\/code>\u5f88\u5bb9\u6613\u642d\u5efa\u4e00\u5957\u9ad8\u6027\u80fd\u7684\u6587\u4ef6\u670d\u52a1\u5668\u96c6\u7fa4\u63d0\u4f9b\u6587\u4ef6\u4e0a\u4f20\u3001\u4e0b\u8f7d\u7b49\u670d\u52a1\u3002<\/p>\n<p><!-- more --><\/p>\n<h2>\u5b89\u88c5libfastcommon<\/h2>\n<p><code>libfastcommon<\/code>\u662f\u4ece<code>FastDFS<\/code>\u548c<code>FastDHT<\/code>\u4e2d\u63d0\u53d6\u51fa\u6765\u7684\u516c\u5171<code>C<\/code>\u51fd\u6570\u5e93\uff0c\u57fa\u7840\u73af\u5883\uff0c\u5b89\u88c5\u5373\u53ef<\/p>\n<pre><code class=\"language-bash\"># wget https:\/\/github.com\/happyfish100\/libfastcommon\/archive\/V1.0.43.tar.gz\n# tar -zxf V1.0.43.tar.gz\n# cd libfastcommon-1.0.43\n# .\/make.sh\n# .\/make.sh install<\/code><\/pre>\n<p>\u590d\u5236\u6587\u4ef6\uff1a\u89e3\u51b3<code>FastDFS<\/code>\u4e2d<code>lib<\/code>\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\u95ee\u9898<\/p>\n<pre><code class=\"language-bash\"># cp \/usr\/lib64\/libfastcommon.so \/usr\/local\/lib\/libfastcommon.so\n# cp \/usr\/lib64\/libfastcommon.so \/usr\/lib\/libfastcommon.so<\/code><\/pre>\n<h2>\u5b89\u88c5FastDFS<\/h2>\n<pre><code class=\"language-bash\"># wget https:\/\/github.com\/happyfish100\/fastdfs\/archive\/V6.06.tar.gz\n# tar -zxf V6.06.tar.gz\n# cd fastdfs-6.06\n# .\/make.sh\n# \/make.sh install<\/code><\/pre>\n<p>\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\u4e3a\uff1a<code>\/etc\/fdfs\/<\/code>\uff0c\u9ed8\u8ba4\u547d\u4ee4\u653e\u5728<code>\/usr\/bin\/<\/code>\u4e2d\uff0c\u4ee5<code>fdfs_<\/code>\u5f00\u5934<\/p>\n<h2>\u914d\u7f6eFastDFS<\/h2>\n<p>\u9996\u5148\u5c06\u914d\u7f6e\u6587\u4ef6\u590d\u5236\u5230<code>\/etc\/fdfs<\/code>\u76ee\u5f55\u4e0b<\/p>\n<pre><code class=\"language-bash\"># cd \/home\/yezhou\/download\/fastdfs-5.05\/conf\n# cp * \/etc\/fdfs\/ \n# cd \/etc\/fdfs\/\n# ls\nanti-steal.jpg  client.conf.sample  mime.types    storage.conf.sample  tracker.conf\nclient.conf     http.conf           storage.conf  storage_ids.conf     tracker.conf.sample<\/code><\/pre>\n<h3>\u914d\u7f6etracker.conf<\/h3>\n<blockquote>\n<p>FastDFS\u8ddf\u8e2a\u5668<\/p>\n<\/blockquote>\n<p>\u4fee\u6539\u5982\u4e0b\u914d\u7f6e\uff1a<\/p>\n<pre><code>#Tracker \u6570\u636e\u548c\u65e5\u5fd7\u76ee\u5f55\u5730\u5740(\u6839\u76ee\u5f55\u5fc5\u987b\u5b58\u5728,\u5b50\u76ee\u5f55\u4f1a\u81ea\u52a8\u521b\u5efa)\nbase_path=\/fastdfs\/tracker\nport=22122<\/code><\/pre>\n<p>\uff081\uff09\u521b\u5efa\u8be5\u76ee\u5f55\uff1a<\/p>\n<pre><code class=\"language-bash\"># mkdir -p \/fastdfs\/tracker<\/code><\/pre>\n<p>\uff082\uff09\u542f\u52a8\/\u5173\u95ed\uff1a<\/p>\n<pre><code class=\"language-bash\">fdfs_trackerd \/etc\/fdfs\/tracker.conf start\/stop<\/code><\/pre>\n<p>\u9ed8\u8ba4\u4f7f\u7528<code>\/etc\/fdfs<\/code>\u4e0b\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5982\u6709\u6307\u5b9a\u914d\u7f6e\u53ef\u5728\u540e\u9762\u8ffd\u52a0\u53c2\u6570\u3002\u5982\u6709\u9632\u706b\u5899\uff0c\u5f00\u653e\u9632\u706b\u5899\u89c4\u5219<\/p>\n<p>\uff083\uff09\u8bbe\u7f6e\u5f00\u673a\u542f\u52a8\uff1a<\/p>\n<pre><code class=\"language-bash\"># systemctl enable fdfs_trackerd<\/code><\/pre>\n<p>\u6216\u8005\uff1a<\/p>\n<pre><code class=\"language-bash\"># vim \/etc\/rc.d\/rc.local<\/code><\/pre>\n<p>\u52a0\u5165\u914d\u7f6e\uff1a<\/p>\n<pre><code class=\"language-bash\"># \/etc\/init.d\/fdfs_trackerd start<\/code><\/pre>\n<p>\uff084\uff09<code>tracker server<\/code>\u76ee\u5f55\u53ca\u6587\u4ef6\u7ed3\u6784\uff1a<\/p>\n<p><code>Tracker<\/code>\u670d\u52a1\u542f\u52a8\u6210\u529f\u540e\uff0c\u4f1a\u5728<code>base_path<\/code>\u4e0b\u521b\u5efa<code>data<\/code>\u3001<code>logs<\/code>\u4e24\u4e2a\u76ee\u5f55\u3002\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n<pre><code>${base_path}\n  |__data\n  |   |__storage_groups.dat\uff1a\u5b58\u50a8\u5206\u7ec4\u4fe1\u606f\n  |   |__storage_servers.dat\uff1a\u5b58\u50a8\u670d\u52a1\u5668\u5217\u8868\n  |__logs\n  |   |__trackerd.log\uff1atracker server \u65e5\u5fd7\u6587\u4ef6 <\/code><\/pre>\n<h3>\u914d\u7f6estorage<\/h3>\n<blockquote>\n<p>\u4ee5\u4e0b\u53ea\u662f\u57fa\u672c\u914d\u7f6e\uff0c\u5982\u6709\u66f4\u7ec6\u5fae\u7684\u9700\u8981\uff0c\u5219\u8bf7\u67e5\u770b\u6240\u6709\u914d\u7f6e\u3002<\/p>\n<\/blockquote>\n<pre><code>group_name=appblog     #\u7ec4\u540d\nbase_path=\/fastdfs\/storage    #\u65e5\u5fd7\u76ee\u5f55\nstore_path0=\/fastdfs\/storage     #\u5b58\u50a8\u76ee\u5f55\ntracker_server=192.168.2.16:22122    #tracker\u8282\u70b9\nhttp.server_port=8888    #\u7aef\u53e3<\/code><\/pre>\n<p>\uff081\uff09\u542f\u52a8<\/p>\n<p>\u53ef\u4ee5\u7528\u8fd9\u79cd\u65b9\u5f0f\u542f\u52a8<\/p>\n<pre><code class=\"language-bash\"># fdfs_storaged \/etc\/fdfs\/storage.conf start<\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u7528\u8fd9\u79cd\u65b9\u5f0f\uff0c\u540e\u9762\u90fd\u7528\u8fd9\u79cd<\/p>\n<pre><code class=\"language-bash\"># service fdfs_storaged start<\/code><\/pre>\n<p>\uff082\uff09\u68c0\u67e5\u8fdb\u7a0b<\/p>\n<pre><code class=\"language-bash\"># netstat -unltp|grep fdfs<\/code><\/pre>\n<p>\uff083\uff09Storage \u5f00\u673a\u542f\u52a8<\/p>\n<pre><code class=\"language-bash\"># systemctl enable fdfs_storaged<\/code><\/pre>\n<p>\u6216\u8005\uff1a<\/p>\n<pre><code class=\"language-bash\"># vim \/etc\/rc.d\/rc.local<\/code><\/pre>\n<p>\u52a0\u5165\u914d\u7f6e\uff1a<\/p>\n<pre><code class=\"language-bash\"># \/etc\/init.d\/fdfs_storaged start<\/code><\/pre>\n<p>\uff084\uff09Storage \u76ee\u5f55<\/p>\n<p><code>Storage<\/code>\u542f\u52a8\u6210\u529f\u540e\uff0c\u5728<code>base_path<\/code>\u4e0b\u521b\u5efa\u4e86<code>data<\/code>\u3001<code>logs<\/code>\u76ee\u5f55\uff0c\u8bb0\u5f55\u7740<code>Storage Server<\/code>\u7684\u4fe1\u606f\u3002<\/p>\n<p>\u5728<code>store_path0<\/code>\u76ee\u5f55\u4e0b\uff0c\u521b\u5efa\u4e86<code>N*N<\/code>\u4e2a\u5b50\u76ee\u5f55\uff1a<\/p>\n<pre><code class=\"language-bash\">[root@ali-web data]# pwd\n\/fastdfs\/storage\/data\n[root@ali-web data]# ls\n00  07  0E  15  1C  23  2A  31  38  3F  46  4D  54  5B  62  69  70  77  7E  85  8C  93  9A  A1  A8  AF  B6  BD  C4  CB  D2  D9  E0  E7  EE  F5  FC\n01  08  0F  16  1D  24  2B  32  39  40  47  4E  55  5C  63  6A  71  78  7F  86  8D  94  9B  A2  A9  B0  B7  BE  C5  CC  D3  DA  E1  E8  EF  F6  FD\n02  09  10  17  1E  25  2C  33  3A  41  48  4F  56  5D  64  6B  72  79  80  87  8E  95  9C  A3  AA  B1  B8  BF  C6  CD  D4  DB  E2  E9  F0  F7  fdfs_storaged.pid\n03  0A  11  18  1F  26  2D  34  3B  42  49  50  57  5E  65  6C  73  7A  81  88  8F  96  9D  A4  AB  B2  B9  C0  C7  CE  D5  DC  E3  EA  F1  F8  FE\n04  0B  12  19  20  27  2E  35  3C  43  4A  51  58  5F  66  6D  74  7B  82  89  90  97  9E  A5  AC  B3  BA  C1  C8  CF  D6  DD  E4  EB  F2  F9  FF\n05  0C  13  1A  21  28  2F  36  3D  44  4B  52  59  60  67  6E  75  7C  83  8A  91  98  9F  A6  AD  B4  BB  C2  C9  D0  D7  DE  E5  EC  F3  FA  storage_stat.dat\n06  0D  14  1B  22  29  30  37  3E  45  4C  53  5A  61  68  6F  76  7D  84  8B  92  99  A0  A7  AE  B5  BC  C3  CA  D1  D8  DF  E6  ED  F4  FB  sync<\/code><\/pre>\n<h3>\u914d\u7f6eclient<\/h3>\n<pre><code class=\"language-bash\">vim client.conf\n\ntracker_server=192.168.2.16:22122   #tracker\u8282\u70b9\nbase_path=\/fastdfs\/client   #\u65e5\u5fd7\u8def\u5f84<\/code><\/pre>\n<h3>\u672c\u5730\u56fe\u7247\u4e0a\u4f20\u6d4b\u8bd5<\/h3>\n<pre><code class=\"language-bash\">[root@ali-web fdfs]# fdfs_upload_file \/etc\/fdfs\/client.conf \/home\/test.png \nappblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812.png<\/code><\/pre>\n<p>\u6216\u8005\uff1a<\/p>\n<pre><code class=\"language-bash\">[root@ali-web fdfs]# fdfs_test \/etc\/fdfs\/client.conf \/home\/test.png \nThis is FastDFS client test program v6.06\n\nCopyright (C) 2008, Happy Fish \/ YuQing\n\nFastDFS may be copied only under the terms of the GNU General\nPublic License V3, which may be found in the FastDFS source kit.\nPlease visit the FastDFS Home Page http:\/\/www.csource.org\/ \nfor more detail.\n\n[2018-5-08 20:21:15] DEBUG - base_path=\/fastdfs\/client, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0\n\ninvalid operation: \/home\/test.png<\/code><\/pre>\n<h2>FastDFS \u914d\u7f6e Nginx \u6a21\u5757<\/h2>\n<p><code>fastdfs-nginx-module<\/code>\u53ef\u4ee5\u91cd\u5b9a\u5411\u6587\u4ef6\u94fe\u63a5\u5230\u6e90\u670d\u52a1\u5668\u53d6\u6587\u4ef6\uff0c\u907f\u514d\u5ba2\u6237\u7aef\u7531\u4e8e\u590d\u5236\u5ef6\u8fdf\u5bfc\u81f4\u7684\u6587\u4ef6\u65e0\u6cd5\u8bbf\u95ee\u9519\u8bef\u3002<\/p>\n<h3>\u4e0b\u8f7d\u5b89\u88c5<\/h3>\n<pre><code class=\"language-bash\"># wget https:\/\/github.com\/happyfish100\/fastdfs-nginx-module\/archive\/master.zip\n# unzip master.zip\n# mv fastdfs-nginx-module-master\/ fastdfs-nginx-module<\/code><\/pre>\n<h3>\u914d\u7f6eNginx<\/h3>\n<pre><code class=\"language-bash\">nginx -s stop\ncd nginx-1.12.1\n\n#\u6dfb\u52a0\u6a21\u5757\n.\/configure --add-module=..\/fastdfs-nginx-module\/src\n(\u5982\u679c\u662fyum\u5b89\u88c5\u7684nginx\uff0c\u6682\u65f6\u8fd8\u6ca1\u627e\u5230\u89e3\u51b3\u529e\u6cd5\uff0c\u76ee\u524d\u7684\u65b9\u6cd5\u662f`nginx -V`\u67e5\u770bnginx\u7248\u672c\uff0c\u7136\u540e\u4e0b\u8f7d\u4e00\u4e2a\u540c\u7248\u672c\u7684nginx\uff0c\n\u7136\u540e\u5c06`\/etc\/nginx`\u4e0b\u6570\u636e\u6574\u4f53\u5907\u4efd\uff0c`make &amp;&amp; make install`\u5b8c\u6210\u540e\u518d\u505a\u6062\u590d)\n#\u91cd\u65b0\u7f16\u8bd1\u548c\u5b89\u88c5\nmake\nmake install\n\n#\u62f7\u8d1d\u914d\u7f6e\u6587\u4ef6\n# pwd\n\/home\/appblog\/download\/fastdfs-nginx-module\/src\n# cp mod_fastdfs.conf \/etc\/fdfs\/<\/code><\/pre>\n<p>\u914d\u7f6e<code>\/etc\/fdfs\/mod_fastdfs.conf<\/code>\u6587\u4ef6<\/p>\n<pre><code class=\"language-bash\">#\u914d\u7f6e \/etc\/fdfs\/mod_fastdfs.conf\u6587\u4ef6\n\nbase_path=\/fastdfs\/tmp   #\u65e5\u5fd7\u76ee\u5f55\nstore_path0=\/fastdfs\/storage\ntracker_server=192.168.2.16:22122\n# the group name of the local storage server\ngroup_name=appblog   #\u548cstorage\u7684groupname\u4e00\u4e00\u5bf9\u5e94\nurl_have_group_name = true   #\u5f00\u542furl\u4e2d\u9644\u5e26group_name<\/code><\/pre>\n<p>\u914d\u7f6enginx<\/p>\n<pre><code class=\"language-bash\"># \u914d\u7f6enginx\n# cd \/usr\/local\/nginx\/conf\/\n# vim nginx.conf\n\n#\u6dfb\u52a0\u5982\u4e0b\u914d\u7f6e\nserver {\n    listen 88;\n    server_name 192.168.27.168;\n\n    location \/appblog\/M00{\n        ngx_fastdfs_module;\n    }\n}\n\n# \u8fdb\u5165\/usr\/local\/nginx\/sbin\u76ee\u5f55\u6267\u884c\u914d\u7f6e\u68c0\u6d4b\n# .\/nginx  -t\nngx_http_fastdfs_set pid=6431\nnginx: the configuration file \/usr\/local\/nginx\/conf\/nginx.conf syntax is ok\nnginx: configuration file \/usr\/local\/nginx\/conf\/nginx.conf test is successful\n\n# \u542f\u52a8nginx\n# .\/nginx \nngx_http_fastdfs_set pid=6436<\/code><\/pre>\n<p>\u670d\u52a1\u91cd\u542f\u5e76\u6d4b\u8bd5<\/p>\n<pre><code class=\"language-bash\"># fdfs_trackerd tracker.conf restart\nwaiting for pid [1202] exit ...\nstarting ...\n# fdfs_storaged storage.conf restart\nwaiting for pid [1211] exit ...\nstarting ...\n# \/usr\/local\/nginx\/sbin\/nginx -s reload\nngx_http_fastdfs_set pid=6463<\/code><\/pre>\n<h2>\u914d\u7f6e\u6210\u529f\u6d4b\u8bd5<\/h2>\n<p>\u6253\u5f00\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812.png\">http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812.png<\/a><\/p>\n<h2>\u914d\u7f6enginx_image_filter \u5b9e\u73b0\u56fe\u7247\u5927\u5c0f\u5207\u5272<\/h2>\n<p>\uff081\uff09\u67e5\u770b<code>nginx -V<\/code>\u662f\u5426\u6709<code>image_filter<\/code>\u6a21\u5757<\/p>\n<pre><code>--with-http_image_filter_module=dynamic<\/code><\/pre>\n<p>\u5982\u679c\u67e5\u51fa\u6765\u662f\u4e0a\u9762\u7684(dynamic)\uff0c\u9700\u8981\u5728\u5168\u5c40\u914d\u4e2d\u52a0\u8f7d\u8be5\u6a21\u5757<\/p>\n<pre><code>load_module &quot;\/usr\/lib64\/nginx\/modules\/ngx_http_image_filter_module.so&quot;;<\/code><\/pre>\n<p>\u5982\u679c\u4e0d\u77e5\u9053\u81ea\u5df1\u7684<code>modules<\/code>\u6587\u4ef6\u5939\u5728\u54ea\uff0c\u53ef\u5728<code>nginx -V<\/code>\u67e5\u770b\u3002<\/p>\n<p>\uff082\uff09\u914d\u7f6enginx\u8f6c\u53d1\u89c4\u5219<\/p>\n<pre><code>location ~ \/yunding\/M00\/(.*)_([0-9]+)x([0-9]+)\\.png {\n    root \/data\/fastdfs\/storage\/data;\n    ngx_fastdfs_module;\n    set $w $2;\n    set $h $3;\n    if ($h != &quot;0&quot;) {\n        rewrite \/yunding\/M00\/(.+)_(\\d+)x(\\d+)\\.(jpg|gif|png)$ \/yunding\/M00\/$1.$4 break;\n    }\n\n    if ($w != &quot;0&quot;) {\n        rewrite \/yunding\/M00\/(.+)_(\\d+)x(\\d+)\\.(jpg|gif|png)$ \/yunding\/M00\/$1.$4 break;\n    }\n    image_filter resize $w $h;\n    image_filter_buffer 2M;\n}\n\nlocation ~ yunding\/M00\/(.+)\\.?(.+) {\n    alias \/data\/fastdfs\/storage\/data;\n    ngx_fastdfs_module;\n}<\/code><\/pre>\n<p>\u539f\u59cb\u56fe\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812.png\">http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812.png<\/a><br \/>\n\u5207\u5272\u56fe\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812_120x120.png\">http:\/\/192.168.2.16:88\/appblog\/M00\/00\/00\/wKgbqFu7T7iAJh7lAABDYbhAMC4812_120x120.png<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FastDFS\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u8f7b\u91cf\u7ea7\u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf\uff0c\u5b83\u5bf9\u6587\u4ef6\u8fdb\u884c\u7ba1\u7406\uff0c\u529f\u80fd\u5305\u62ec\uff1a\u6587\u4ef6\u5b58\u50a8\u3001\u6587\u4ef6\u540c\u6b65\u3001\u6587\u4ef6\u8bbf\u95ee\uff08\u6587\u4ef6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[333],"tags":[426,25],"class_list":["post-1706","post","type-post","status-publish","format-standard","hentry","category-install-deploy","tag-fastdfs","tag-nginx"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1706"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1706\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}