{"id":3873,"date":"2022-04-10T17:56:59","date_gmt":"2022-04-10T09:56:59","guid":{"rendered":"https:\/\/blog.coderfan.org\/?p=3873"},"modified":"2023-01-08T19:18:28","modified_gmt":"2023-01-08T11:18:28","slug":"x-ui-usage-enhancment-for-better-enhancement","status":"publish","type":"post","link":"https:\/\/blog.coderfan.org\/en\/x-ui-usage-enhancment-for-better-enhancement.html","title":{"rendered":"Advanced use of X-UI panel: faster, safer and more stable"},"content":{"rendered":"<div class='booster-block booster-read-block'>\n                <div class=\"twp-read-time\">\n                \t<i class=\"booster-icon twp-clock\"><\/i> <span>Read Time:<\/span>1 Minute, 57 Second                <\/div>\n\n            <\/div>\n<p class=\"has-text-align-justify\">I've been using the X-UI panel for a while, and overall I'm very satisfied. I made a summary while tossing. Today, this article will bring you an advanced tutorial on using X-UI to help you use X-UI better.<\/p>\n\n\n\n<p>The highlights of today's blog include the following points:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Certificate Issue and Usage<\/li><li>Firewall settings<\/li><li>log configuration<\/li><li>Proxies setup<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Certificate Issue and Usage<\/h4>\n\n\n\n<p class=\"has-text-align-justify\">I submitted a PR a month ago, and added to the x-ui.sh script the function of prompting to modify the panel settings after installation (to avoid too many children\u2019s shoes using the default settings and being exploited by others) and certificate application functions, please refer to this<a href=\"https:\/\/github.com\/vaxilu\/x-ui\/commit\/98e050ef770e16d4c771611051b313f28a9528a7\" class=\"ek-link\">commit,<\/a>Now you can update the script for issuing certificates by one-key<\/p>\n\n\n\n<p class=\"has-text-align-justify\">To use the integrated certificate application function, you need to obtain Cloudlfare's API and account email information. Since the script uses the DNS API to apply, it does not depend on any network port at all. For specific usage instructions, please refer to my<a href=\"https:\/\/github.com\/FranzKafkaYu\/x-ui\" class=\"ek-link\">pernel repo<\/a>illustration.To put it simply, this script saves many links. You only need to enter the following information to complete the certificate application. The schematic diagram is as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"717\" height=\"159\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-04_141259.png\" alt=\"\" class=\"wp-image-3874\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-04_141259.png 717w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-04_141259-300x67.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-04_141259-18x4.png 18w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\"><strong>At the same time, the certificate applied for by the script is a generic domain name certificate, which means that you can use this certificate for unlimited second-level domain names except your own top-level domain name,<\/strong>\uff0cand you can copy it to other servers for use.<\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong>When using certificates in X-UI, it is recommended that you use fullchain certificates<\/strong>, What is a fullchain certificate? In fact, it is a certificate that contains the content of the entire certificate chain. As shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"181\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain-1024x181.png\" alt=\"\" class=\"wp-image-3876\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain-1024x181.png 1024w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain-300x53.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain-768x136.png 768w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain-18x3.png 18w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/fullchain.png 1046w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The advantage of using the fullchain certificate is that it can avoid the connection failure caused by the certificate problem to the greatest extent.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">In addition, when setting the node certificate, in addition to using the certificate path, you can also copy the contents of the public key and key certificate into the corresponding settings for use. However, this is inconvenient to use, and the best practice is to use the path, so that even if the certificate is updated, you do not need to perform secondary settings.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">It should be noted that the currently applied certificate is actually RSA symmetric encryption. If you need to apply for an ECC certificate (personally think it is not necessary), you need to refer to the official documentation of acme to apply.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Firewall settings<\/h4>\n\n\n\n<p class=\"has-text-align-justify\">In the use of X-UI, the firewall settings are very important. Setting up a firewall is to protect the security of our server, and it is also to protect the security of our panel. In the use of X-UI, the settings of the protective wall include:<\/p>\n\n\n\n<p class=\"has-text-align-justify\">1) Panel login port: It is generally recommended to set the X-UI panel login port to the HTTPS port permitted by Cloudflare, such as 443, 2053, 2083, 2087, 2096 and 8443. In this way, if we need to open the CDN, we can access the panel normally. Regarding the firewall settings, I recommend using UFW for management and settings. Take the Ubantu system as an example:<\/p>\n\n\n\n<p><strong>Install the UFW firewall tool:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update &amp;&amp; sudo apt install ufw<\/code><\/pre>\n\n\n\n<p><strong>Enable UFW firewall<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw enable<\/code><\/pre>\n\n\n\n<p><strong>Open panel port for listiening<\/strong>(Take port 8443 as an example):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ufw allow from xx.xxx.xx.xx to any port 8443<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-justify\">Here, the IP address xx.xxx.xx.xx is actually added to the whitelist (allow means firewall will let it go), which restricts only specific IPs to access the panel login port.<strong>When using X-UI, I recommend that you add several of your own servers to the whitelist, so that you can enter your panel through different server nodes<\/strong>. In fact, if you don't add any whitelists, then you only have access to control your panel through the nodes set on the panel. For the sake of insurance (such as the node set by the panel is blocked, the port or IP is blocked), you'd better add your other servers to the whitelist. Once an unexpected situation occurs, you can still access the panel through the nodes of other services. to modify. You can take a look at my UFW settings:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"289\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/\u9762\u677f.png\" alt=\"\" class=\"wp-image-3877\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/\u9762\u677f.png 730w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/\u9762\u677f-300x119.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/\u9762\u677f-18x7.png 18w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Here my panel listiening port is set to 2096, and my other servers are added to the whitelist.<\/p>\n\n\n\n<p><strong>It should be noted that after enabling UFW, be sure to open your SSH access port and your node port<\/strong>\u3002<\/p>\n\n\n\n<p>Check out the current UFW settings:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw status<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">log configuration<\/h4>\n\n\n\n<p class=\"has-text-align-justify\">It should be noted that the log here is not the log of X-UI itself, but the log of the Xray program. Sometimes in order to troubleshoot problems or check status, we have to enable Xray logging. If we need to open the log, we need to modify the configuration template in the panel console, as shown in the following figure:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"906\" height=\"314\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-10_170526.png\" alt=\"\" class=\"wp-image-3878\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-10_170526.png 906w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-10_170526-300x104.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-10_170526-768x266.png 768w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/2022-04-10_170526-18x6.png 18w\" sizes=\"auto, (max-width: 906px) 100vw, 906px\" \/><\/figure>\n\n\n\n<p>In the configuration template, we added log related fields, such as my settings are as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"log\": {\n    \"access\": \"\/usr\/local\/x-ui\/bin\/access.log\",\n    \"error\": \"\/usr\/local\/x-ui\/bin\/error.log\",\n    \"loglevel\": \"warning\",\n    \"dnsLog\": false\n }<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-justify\">Here access sets the access log, error sets the error log,loglevel is used to set the log level, warning is recommended, and dnsLog is used to set the DNS query log, which is recommended to be false. If you have requirements such as fakeDNS\/DoH\/DoT, it is recommended to set it to true.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">After setting, we restart the panel, enter the corresponding directory of the server to view the log, and you can see the following information:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"328\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/x-uilog.png\" alt=\"\" class=\"wp-image-3881\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/x-uilog.png 846w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/x-uilog-300x116.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/x-uilog-768x298.png 768w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/x-uilog-18x7.png 18w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The coded part here is the IP of the client, and the right side is the specific information of the access. Since the current X-UI will use Xray's API for traffic query later, it will cause many duplicate and useless logs in the log. We can use the following command to filter the output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cat access.log | grep -v 127.0.0.1 <\/code><\/pre>\n\n\n\n<p>View all rejected connections:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cat access.log | grep rejected<\/code><\/pre>\n\n\n\n<p>The output is as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"107\" src=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/rejected.png\" alt=\"\" class=\"wp-image-3882\" srcset=\"https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/rejected.png 910w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/rejected-300x35.png 300w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/rejected-768x90.png 768w, https:\/\/blog.coderfan.org\/wp-content\/uploads\/2022\/04\/rejected-18x2.png 18w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">I recommend that you check your node logs from time to time, especially for connections refused. To a large extent, it comes from the detection of the wall. If you find this kind of detection, it is recommended that you add it to the list through UFW or Fail2ban.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">In addition, in order to make it easier for us to view the logs, it is recommended that you change the time zone of the server to your own time zone, which will be of great help for us to view the logs.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Here is another point to mention. After the log is turned on, the log will continue to accumulate. If it is not cleaned up for a long time, it will cause unnecessary memory consumption. Use my script to set, execute the following command in the root directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/usr\/local\/x-ui\/bin &amp;&amp;  wget https:\/\/github.com\/FranzKafkaYu\/BashScripts\/blob\/main\/FileManuplite\/autoCheck.sh<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-justify\">It should be noted that if the directory set by your log is inconsistent with mine, please modify the script yourself to adapt. After modification, please use the command -<strong>crontab -e<\/strong>\uff1ato adds the following scheduled tasks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>00 0 * * 6 \/usr\/local\/x-ui\/bin\/autoCheck.sh &gt;&gt; \/usr\/local\/x-ui\/bin\/autoCheck.log<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-justify\">After the setting is completed, the log size can be automatically detected and deleted, and X-UI will be restarted by itself when deleting to ensure the smooth operation of X-UI.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Proxies setup<\/h4>\n\n\n\n<p class=\"has-text-align-justify\">The node setting is actually a very complicated issue. Due to some limitations of the current X-UI, the advantages of Xray cannot be fully utilized. However, there are still some points to be aware of, including:<\/p>\n\n\n\n<p class=\"has-text-align-justify\">1. Try to choose a high port, if you need to set a fallback, try to use port 443 as the exposed port<\/p>\n\n\n\n<p class=\"has-text-align-justify\">2. Set the expiration time, change the password or port after the expiration<\/p>\n\n\n\n<p class=\"has-text-align-justify\">3. Try not to use xtls. According to the latest usage and issue submissions, xtls has certain risks.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Others<\/h4>\n\n\n\n<p>In addition to the above, there are some other points that can be noted, including<\/p>\n\n\n\n<p>1. Regularly update the geoip.dat and geosite.dat resource files<\/p>\n\n\n\n<p>This can be done by adding the following cron tasks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>30 9 * * * \/usr\/bin\/curl -s -L -o \/usr\/local\/x-ui\/bin\/geoip.dat https:\/\/github.com\/Loyalsoldier\/v2ray-rules-dat\/releases\/latest\/download\/geoip.dat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>30 9 * * * \/usr\/bin\/curl -s -L -o \/usr\/local\/x-ui\/bin\/geosite.dat https:\/\/github.com\/Loyalsoldier\/v2ray-rules-dat\/releases\/latest\/download\/geosite.dat<\/code><\/pre>\n\n\n\n<p>2. Please open CDN during emergency<\/p>\n\n\n\n<p class=\"has-text-align-justify\">At some important time points, the movement of the wall may increase. At this time, try to open the CDN for use. Although turning on CDN will inevitably reduce the speed, but it can ensure security to the greatest extent, don't forget to use ws+TLS to turn on CDN~<\/p>\n\n\n\n<p>3. Be sure to turn on BBR acceleration<\/p>\n\n\n\n<p class=\"has-text-align-justify\">The gain of bbr is actually very large. The X-UI script integrates the function of turning on BBR with one click. Please be sure to turn it on.<\/p>\n\n\n\n<p>The above is the content of this blog~<\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong><em>In addition, since the development progress of the original author has slowed down, I am also learning the go language myself, so I forked the original author's warehouse and updated the functions. The current expanded functions include<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Panel settings query (implemented)<\/strong><\/li><li><strong>Traffic usage daily reminder (implemented)<\/strong><\/li><li><strong>Panel login reminder (to be implemented)<\/strong><\/li><li><strong>Node expiration reminder (to be implemented)<\/strong><\/li><li><strong>More certificate application methods (to be implemented)<\/strong><\/li><li><strong>Panel login whitelist setting (to be implemented)<\/strong><\/li><\/ul>\n\n\n\n<p><em><strong>At the same time, the issue area has also been opened. I hope you can use it and give me feedback. I will make PR to the original warehouse from time to time to improve X-UI together.<\/strong>,<strong>project rgithub address please<a href=\"https:\/\/github.com\/FranzKafkaYu\/x-ui\">click here<\/a><\/strong><\/em><\/p>\n        <div class=\"booster-block booster-reactions-block\">\n            <div class=\"twp-reactions-icons\">\n                \n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-1\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/happy.svg\" alt=\"Happy\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">\n                        Happy                    <\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">25<\/span>\n                        \n                                                <span class=\"twp-react-percent\"><span>81<\/span> %<\/span>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-2\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/sad.svg\" alt=\"Sad\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">\n                        Sad                    <\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">2<\/span>\n                                                                        <span class=\"twp-react-percent\"><span>6<\/span> %<\/span>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-3\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/excited.svg\" alt=\"Excited\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">\n                        Excited                    <\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">1<\/span>\n                                                                        <span class=\"twp-react-percent\"><span>3<\/span> %<\/span>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-6\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/sleepy.svg\" alt=\"Sleepy\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">\n                        Sleepy                    <\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">2<\/span>\n                        \n                                                <span class=\"twp-react-percent\"><span>6<\/span> %<\/span>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-4\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/angry.svg\" alt=\"Angry\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">Angry<\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">1<\/span>\n                                                                        <span class=\"twp-react-percent\"><span>3<\/span> %<\/span>\n                        \n                    <\/div>\n                <\/div>\n\n                <div class=\"twp-reacts-wrap\">\n                    <a react-data=\"be-react-5\" post-id=\"3873\" class=\"be-face-icons un-reacted\" href=\"javascript:void(0)\">\n                        <img decoding=\"async\" src=\"https:\/\/blog.coderfan.org\/wp-content\/plugins\/booster-extension\/\/assets\/icon\/surprise.svg\" alt=\"Surprise\">\n                    <\/a>\n                    <div class=\"twp-reaction-title\">Surprise<\/div>\n                    <div class=\"twp-count-percent\">\n                                                    <span style=\"display: none;\" class=\"twp-react-count\">0<\/span>\n                                                                        <span class=\"twp-react-percent\"><span>0<\/span> %<\/span>\n                                            <\/div>\n                <\/div>\n\n            <\/div>\n        <\/div>","protected":false},"excerpt":{"rendered":"<p>X-UI advanced use, faster, safer and more stable experience~<\/p>","protected":false},"author":1,"featured_media":3336,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":1,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-3873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bypass-firewalls"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[]}},"aioseo_notices":[],"featured_image_urls":{"full":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"thumbnail":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-150x150.png",150,150,true],"medium":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-300x129.png",300,129,true],"medium_large":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-768x331.png",768,331,true],"large":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-1024x441.png",1024,441,true],"1536x1536":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"2048x2048":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"trp-custom-language-flag":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-18x8.png",18,8,true]},"post_excerpt_stackable":"<p>X-UI\u4f7f\u7528\u8fdb\u9636\uff0c\u66f4\u5feb\uff0c\u66f4\u5b89\u5168\uff0c\u66f4\u7a33\u5b9a\u7684\u4f7f\u7528\u4f53\u9a8c~<\/p>\n","category_list":"<a href=\"https:\/\/blog.coderfan.org\/en\/category\/bypass-firewalls\" rel=\"category tag\">\u79d1\u5b66\u4e0a\u7f51<\/a>","author_info":{"name":"FranzKafka95","url":"https:\/\/blog.coderfan.org\/en\/author\/yushenglonely95"},"comments_num":"35 comments","featured_image_urls_v2":{"full":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"thumbnail":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-150x150.png",150,150,true],"medium":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-300x129.png",300,129,true],"medium_large":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-768x331.png",768,331,true],"large":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-1024x441.png",1024,441,true],"1536x1536":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"2048x2048":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762.png",1536,662,false],"trp-custom-language-flag":["https:\/\/blog.coderfan.org\/wp-content\/uploads\/2021\/07\/XUI\u767b\u5f55\u754c\u9762-18x8.png",18,8,true]},"post_excerpt_stackable_v2":"<p>X-UI\u4f7f\u7528\u8fdb\u9636\uff0c\u66f4\u5feb\uff0c\u66f4\u5b89\u5168\uff0c\u66f4\u7a33\u5b9a\u7684\u4f7f\u7528\u4f53\u9a8c~<\/p>\n","category_list_v2":"<a href=\"https:\/\/blog.coderfan.org\/en\/category\/bypass-firewalls\" rel=\"category tag\">\u79d1\u5b66\u4e0a\u7f51<\/a>","author_info_v2":{"name":"FranzKafka95","url":"https:\/\/blog.coderfan.org\/en\/author\/yushenglonely95"},"comments_num_v2":"35 comments","_links":{"self":[{"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/posts\/3873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/comments?post=3873"}],"version-history":[{"count":9,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/posts\/3873\/revisions"}],"predecessor-version":[{"id":4252,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/posts\/3873\/revisions\/4252"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/media\/3336"}],"wp:attachment":[{"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/media?parent=3873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/categories?post=3873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coderfan.org\/en\/wp-json\/wp\/v2\/tags?post=3873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}