A Wikimedia Projects Reverse Proxy based on Nginx
3 | 4 | **使用方法 | Instructions for Use** 5 | 6 | 1. 将文件夹`nginx-wikimirror`([Release](https://github.com/AnYiEE/nginx-wikimirror/releases))下载至本地,并保持目录结构,不要直接克隆仓库Request\sfrom\s((?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9])))(.+?)" "Request from $remote_addr$2
Reverse proxy: example.org ($1) " r;
22 | ###################
23 | sub_filter "\.wikipedia\.org" "\.wikipedia\.(?:example\.)?org";
24 |
25 | sub_filter_once off;
26 | sub_filter_types *;
27 | subs_filter_types *;
--------------------------------------------------------------------------------
/conf/wiki.conf:
--------------------------------------------------------------------------------
1 | proxy_cookie_domain wikimediafoundation.org wikimediafoundation.example.org;
2 | proxy_cookie_domain ~(?(advisors(?:\.m)?|advisory(?:\.m)?|affcom|am(?:\.m)?|analytics|annual|api(?:\.m)?|ar(?:\.m)?|auditcom|bd(?:\.m)?|be(?:\.m)?|blog|board|boardgovcom|br(?:\.m)?|bugzilla|ca(?:\.m)?|chair|checkuser(?:\.m)?|cn(?:\.m)?|co(?:\.m)?|collab|(?:test-)?commons(?:\.m)?|config-master|cxserver|dbtree|design|developer|diff|dk(?:\.m)?|doc|ec(?:\.m)?|ee(?:\.m)?|electcom(?:\.m)?|etherpad|exec(?:\.m)?|fdc(?:\.m)?|fi(?:\.m)?|foundation(?:\.m)?|ge(?:\.m)?|gerrit|github|gr(?:\.m)?|grafana|grants(?:\.m)?|graphite|hi(?:\.m)?|horizon|id(?:\.m)?|id-internal(?:\.m)?|idp|iegcom(?:\.m)?|il|incubator(?:\.m)?|integration|internal|labtestwikitech|legalteam(?:\.m)?|lists|login(?:\.m)?|logstash|mai(?:\.m)?|maps|meta(?:\.m)?|mk(?:\.m)?|movementroles|mx(?:\.m)?|ng(?:\.m)?|nl(?:\.m)?|no(?:\.m)?|noboard-chapters|noc|nyc(?:\.m)?|nz(?:\.m)?|office(?:\.m)?|ombuds(?:\.m)?|ombudsmen|ores|otrs-wiki(?:\.m)?|outreach(?:\.m)?|pa-us(?:\.m)?|people|performance|phabricator|pl(?:\.m)?|planet|policy|projectcom|pt(?:\.m)?|punjabi(?:\.m)?|quality(?:\.m)?|research|romd(?:\.m)?|rs(?:\.m)?|rt|ru(?:\.m)?|se(?:\.m)?|schema|searchcom|secure|spcom|species(?:\.m)?|static-(?:bugzilla|codereview)|steward(?:\.m)?|strategy(?:\.m)?|stream|svn|techblog|techconduct|ticket|toolsadmin|tr(?:\.m)?|transitionteam(?:\.m)?|transparency|ua(?:\.m)?|upload|usability|vote(?:\.m)?|vrt-wiki(?:\.m)?|wb(?:\.m)?|wikimania(?:200[5-9]|201[0-8]|team)?(?:\.m)?|wikitech(?:-static)?|www)\.)?wikimedia\.org$ ${subcookie}example.org;
3 | proxy_cookie_domain ~(?(wiki(?:books|data|functions|news|pedia|quote|source|versity|voyage)|wiktionary|mediawiki)\.)org$ ${subcookie}example.org;
4 | proxy_cookie_domain phab.wmfusercontent.org phab.example.org;
5 | proxy_cookie_domain wma.wmcloud.org wma.example.org;
6 |
7 | proxy_hide_header age;
8 | proxy_hide_header backend-timing;
9 | proxy_hide_header content-location;
10 | proxy_hide_header content-security-policy;
11 | proxy_hide_header content-security-policy-report-only;
12 | proxy_hide_header host-header;
13 | proxy_hide_header link;
14 | proxy_hide_header mediawiki-cors-rejection;
15 | proxy_hide_header nel;
16 | proxy_hide_header p3p;
17 | proxy_hide_header permissions-policy;
18 | proxy_hide_header proxy-connection;
19 | proxy_hide_header referrer-policy;
20 | proxy_hide_header report-to;
21 | proxy_hide_header server-timing;
22 | proxy_hide_header strict-transport-security;
23 | proxy_hide_header timing-allow-origin;
24 | proxy_hide_header x-analytics;
25 | proxy_hide_header x-ats-timestamp;
26 | proxy_hide_header x-cache;
27 | proxy_hide_header x-cache-int;
28 | proxy_hide_header x-cache-status;
29 | proxy_hide_header x-client-ip;
30 | proxy_hide_header x-content-security-policy;
31 | proxy_hide_header x-content-security-policy-report-only;
32 | proxy_hide_header x-content-type-options;
33 | proxy_hide_header x-envoy-upstream-service-time;
34 | proxy_hide_header x-object-meta-sha1base36;
35 | proxy_hide_header x-powered-by;
36 | proxy_hide_header x-redirect-by;
37 | proxy_hide_header x-request-id;
38 | proxy_hide_header x-resource-location;
39 | proxy_hide_header x-rq;
40 | proxy_hide_header x-tec-api-origin;
41 | proxy_hide_header x-tec-api-root;
42 | proxy_hide_header x-tec-api-version;
43 | proxy_hide_header x-timestamp;
44 | proxy_hide_header x-trans-id;
45 | proxy_hide_header x-varnish;
46 | proxy_hide_header x-vector-backend-object;
47 | proxy_hide_header x-webkit-csp;
48 | proxy_hide_header x-webkit-csp-report-only;
49 | proxy_hide_header x-xss-protection;
50 | proxy_hide_header xkey;
51 |
52 | proxy_pass_header server;
53 |
54 | proxy_redirect ~^https?:\/\/www\.m\.(wiki(?:data|functions)|mediawiki)\.org\/$ https://m.$1.example.org/;
55 | proxy_redirect ~^https?:\/\/(m\.)?wikisource\.org(\/?(?:\S*?))$ https://$1wikisource.example.org$2;
56 | proxy_redirect ~^https?:\/\/(advisors(?:\.m)?|advisory(?:\.m)?|affcom|am(?:\.m)?|analytics|annual|api(?:\.m)?|ar(?:\.m)?|auditcom|bd(?:\.m)?|be(?:\.m)?|blog|board|boardgovcom|br(?:\.m)?|bugzilla|ca(?:\.m)?|chair|checkuser(?:\.m)?|cn(?:\.m)?|co(?:\.m)?|collab|(?:test-)?commons(?:\.m)?|config-master|cxserver|dbtree|design|developer|diff|dk(?:\.m)?|doc|ec(?:\.m)?|ee(?:\.m)?|electcom(?:\.m)?|etherpad|exec(?:\.m)?|fdc(?:\.m)?|fi(?:\.m)?|foundation(?:\.m)?|ge(?:\.m)?|gerrit|gitlab|gr(?:\.m)?|grafana|grants(?:\.m)?|graphite|hi(?:\.m)?|horizon|id(?:\.m)?|id-internal(?:\.m)?|idp|iegcom(?:\.m)?|il|incubator(?:\.m)?|intake-(?:analytics|logging)|integration|internal|labtestwikitech|legalteam(?:\.m)?|lists|login(?:\.m)?|logstash|mai(?:\.m)?|maps|meta(?:\.m)?|mk(?:\.m)?|movementroles|mx(?:\.m)?|ng(?:\.m)?|nl(?:\.m)?|no(?:\.m)?|noboard-chapters|noc|nyc(?:\.m)?|nz(?:\.m)?|office(?:\.m)?|ombuds(?:\.m)?|ombudsmen|ores|otrs-wiki(?:\.m)?|outreach(?:\.m)?|pa-us(?:\.m)?|people|performance|phabricator|piwik|pl(?:\.m)?|planet|policy|projectcom|pt(?:\.m)?|punjabi(?:\.m)?|quality(?:\.m)?|research|romd(?:\.m)?|rs(?:\.m)?|rt|ru(?:\.m)?|se(?:\.m)?|schema|searchcom|secure|spcom|species(?:\.m)?|static-(?:bugzilla|codereview)|steward(?:\.m)?|strategy(?:\.m)?|stream|svn|techblog|techconduct|ticket|toolsadmin|tr(?:\.m)?|transitionteam(?:\.m)?|transparency|ua(?:\.m)?|upload|usability|vote(?:\.m)?|vrt-wiki(?:\.m)?|wb(?:\.m)?|wikimania(?:200[5-9]|201[0-8]|team)?(?:\.m)?|wikitech(?:-static)?|www)\.wikimedia\.org(\/?(?:\S*?))$ https://$1.example.org$2;
57 | proxy_redirect ~^https?:\/\/wikimediafoundation\.org(\/?(?:\S*?))$ https://wikimediafoundation.example.org$1;
58 | proxy_redirect https://$subdomain.wikibooks.org/ https://$subdomain.wikibooks.example.org/;
59 | proxy_redirect https://$subdomain.m.wikibooks.org/ https://$subdomain.m.wikibooks.example.org/;
60 | proxy_redirect https://$subdomain.wikidata.org/ https://$subdomain.wikidata.example.org/;
61 | proxy_redirect https://$subdomain.m.wikidata.org/ https://$subdomain.m.wikidata.example.org/;
62 | proxy_redirect https://$subdomain.wikifunctions.org/ https://$subdomain.wikifunctions.example.org/;
63 | proxy_redirect https://$subdomain.wikinews.org/ https://$subdomain.wikinews.example.org/;
64 | proxy_redirect https://$subdomain.m.wikinews.org/ https://$subdomain.m.wikinews.example.org/;
65 | proxy_redirect https://$subdomain.wikipedia.org/ https://$subdomain.wikipedia.example.org/;
66 | proxy_redirect https://$subdomain.m.wikipedia.org/ https://$subdomain.m.wikipedia.example.org/;
67 | proxy_redirect https://$subdomain.wikiquote.org/ https://$subdomain.wikiquote.example.org/;
68 | proxy_redirect https://$subdomain.m.wikiquote.org/ https://$subdomain.m.wikiquote.example.org/;
69 | proxy_redirect https://$subdomain.wikisource.org/ https://$subdomain.wikisource.example.org/;
70 | proxy_redirect https://$subdomain.m.wikisource.org/ https://$subdomain.m.wikisource.example.org/;
71 | proxy_redirect https://$subdomain.wiktionary.org/ https://$subdomain.wiktionary.example.org/;
72 | proxy_redirect https://$subdomain.m.wiktionary.org/ https://$subdomain.m.wiktionary.example.org/;
73 | proxy_redirect https://$subdomain.wikiversity.org/ https://$subdomain.wikiversity.example.org/;
74 | proxy_redirect https://$subdomain.m.wikiversity.org/ https://$subdomain.m.wikiversity.example.org/;
75 | proxy_redirect https://$subdomain.wikivoyage.org/ https://$subdomain.wikivoyage.example.org/;
76 | proxy_redirect https://$subdomain.m.wikivoyage.org/ https://$subdomain.m.wikivoyage.example.org/;
77 | proxy_redirect https://$subdomain.mediawiki.org/ https://$subdomain.mediawiki.example.org/;
78 | proxy_redirect https://$subdomain.planet.wikimedia.org/ https://$subdomain.planet.example.org/;
79 | proxy_redirect https://$subdomain.wikimediafoundation.org/ https://$subdomain.wikimediafoundation.example.org/;
80 | proxy_redirect ~^https?:\/\/([0-9a-z-][^.]*(?:\.m)?)\.(wiki(?:books|data|functions|news|pedia|quote|source|versity|voyage)|wiktionary|mediawiki)\.org(\/?(?:\S*?))$ https://$1.$2.example.org$3;
81 | proxy_redirect ~^https?:\/\/([0-9a-z-][^.]+)\.planet\.wikimedia\.org(\/?(?:\S*?))$ https://$1.planet.example.org$2;
82 | proxy_redirect ~^https?:\/\/([0-9a-z-][^.]+)\.wikimediafoundation\.org(\/?(?:\S*?))$ https://$1.wikimediafoundation.example.org$2;
83 |
84 | proxy_set_header Accept $http_accept;
85 | proxy_set_header Accept-Language $http_accept_language;
86 | proxy_set_header User-Agent $http_user_agent;
87 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
88 | proxy_set_header X-Forwarded-Proto https;
89 | proxy_set_header X-Real-IP $remote_addr;
90 |
91 | proxy_ssl_server_name on;
--------------------------------------------------------------------------------
/conf/wiki.nginx:
--------------------------------------------------------------------------------
1 | map $http_upgrade $connection_upgrade {
2 | default upgrade;
3 | "" close;
4 | }
5 | upstream wiki-IPAddress {
6 | # server 208.80.154.224:443; #美国阿什本
7 | # server 208.80.153.224:443; #美国卡罗尔顿
8 | # server 198.35.26.96:443; #美国旧金山
9 | # server 91.198.174.192:443; #荷兰阿姆斯特丹
10 | # server 103.102.166.224:443; #新加坡
11 | # server 185.15.58.224:443; #法国马赛
12 | keepalive 300;
13 | }
14 | upstream upload-IPAddress {
15 | # server 208.80.154.240:443; #美国阿什本
16 | # server 208.80.153.240:443; #美国卡罗尔顿
17 | # server 198.35.26.112:443; #美国旧金山
18 | # server 91.198.174.208:443; #荷兰阿姆斯特丹
19 | # server 103.102.166.240:443; #新加坡
20 | # server 185.15.58.240:443; #法国马赛
21 | keepalive 300;
22 | }
23 | upstream static-IPAddress {
24 | server 127.0.0.1:80;
25 | }
26 |
27 | server {
28 | listen 80 reuseport default;
29 | listen 443 ssl reuseport default;
30 | server_name _;
31 | include /path/to/wikimirror/conf/wiki-site-http.conf;
32 |
33 | ssl_certificate /path/to/fullchain.crt;
34 | ssl_certificate_key /path/to/key;
35 | ssl_trusted_certificate /path/to/fullchain.crt;
36 |
37 | return 301 https://www.example.org;
38 | }
39 |
40 | server {
41 | listen 80;
42 | server_name static-internal.example.org;
43 |
44 | if ($http_user_agent ~* "Bot|Spider|Barkrowler|BingPreview|Feedfetcher-Google|ia_archiver|libwww-perl|MBCrawler|Mediapartners-Google|MSNot-media|Python|Teoma|Yahoo! Slurp|^$") {
45 | return 444;
46 | }
47 |
48 | root /path/to/wikimirror/static;
49 | error_page 400 403 404 500 = https://static-internal.example.org;
50 |
51 | location = / {
52 | return 204;
53 | }
54 | location = /robots.txt {
55 | index robots.txt;
56 | }
57 | location ~ ^(?:.+?)\.(?:gif|ico|jpe?g|png|svg|webp)$ {
58 | expires 30d;
59 | }
60 | }
61 |
62 | server {
63 | listen 80;
64 | server_name example.org;
65 | include /path/to/wikimirror/conf/wiki-site-http.conf;
66 |
67 | return 301 https://$host;
68 | }
69 |
70 | server {
71 | listen 443 ssl;
72 | server_name example.org;
73 | include /path/to/wikimirror/conf/wiki-site-http.conf;
74 |
75 | ssl_certificate /path/to/fullchain.crt;
76 | ssl_certificate_key /path/to/key;
77 | ssl_trusted_certificate /path/to/fullchain.crt;
78 |
79 | more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubdomains; preload";
80 |
81 | return 301 https://www.$host;
82 | }
83 |
84 | server {
85 | listen 80;
86 | server_name ~^[^.]+(?:\.m)?(?:\.(?:wiki(?:books|data|functions|news|pedia|quote|source|versity|voyage)|wiktionary|mediawiki|planet|wikimediafoundation))?\.example\.org$;
87 | include /path/to/wikimirror/conf/wiki-site-http.conf;
88 |
89 | return 301 https://$host$request_uri;
90 | }
91 |
92 | server {
93 | server_name ~^(?(analytics|annual|bugzilla|config-master|cxserver|dbtree|design|developer|doc|grafana|graphite|horizon|id-internal(?:\.m)?|il|integration|logstash|noc|office(?:\.m)?|performance|planet|research|schema|secure|static-(?:bugzilla|codereview)|svn|ticket|toolsadmin|transparency))\.example\.org$;
94 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
95 | set $hostdomain wikimedia;
96 |
97 | include /path/to/wikimirror/conf/wiki-location-api.conf;
98 | include /path/to/wikimirror/conf/wiki-location-main.conf;
99 | include /path/to/wikimirror/conf/wiki-location-static.conf;
100 | proxy_hide_header Upgrade;
101 | }
102 |
103 | server {
104 | server_name ~^(?(advisors(?:\.m)?|advisory(?:\.m)?|affcom|am(?:\.m)?|api(?:\.m)?|ar(?:\.m)?|auditcom|bd(?:\.m)?|be(?:\.m)?|board|boardgovcom|br(?:\.m)?|ca(?:\.m)?|chair|checkuser(?:\.m)?|cn(?:\.m)?|co(?:\.m)?|collab|(?:test-)?commons(?:\.m)?|dk(?:\.m)?|ec(?:\.m)?|ee(?:\.m)?|electcom(?:\.m)?|exec(?:\.m)?|fdc(?:\.m)?|fi(?:\.m)?|foundation(?:\.m)?|ge(?:\.m)?|gr(?:\.m)?|grants(?:\.m)?|hi(?:\.m)?|id(?:\.m)?|iegcom(?:\.m)?|incubator(?:\.m)?|internal|labtestwikitech|legalteam(?:\.m)?|login(?:\.m)?|mai(?:\.m)?|meta(?:\.m)?|mk(?:\.m)?|movementroles|mx(?:\.m)?|ng(?:\.m)?|nl(?:\.m)?|no(?:\.m)?|noboard-chapters|nyc(?:\.m)?|nz(?:\.m)?|ombuds(?:\.m)?|ombudsmen|ores|otrs-wiki(?:\.m)?|outreach(?:\.m)?|pa-us(?:\.m)?|people|pl(?:\.m)?|pt(?:\.m)?|projectcom|punjabi(?:\.m)?|quality(?:\.m)?|romd(?:\.m)?|rs(?:\.m)?|rt|ru(?:\.m)?|se(?:\.m)?|searchcom|spcom|species(?:\.m)?|steward(?:\.m)?|strategy(?:\.m)?|techconduct|tr(?:\.m)?|transitionteam(?:\.m)?|ua(?:\.m)?|usability|vote(?:\.m)?|vrt-wiki(?:\.m)?|wb(?:\.m)?|wikimania(?:200[5-9]|201[0-8]|team)?(?:\.m)?|wikitech))\.example\.org$;
105 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
106 | set $hostdomain wikimedia;
107 |
108 | include /path/to/wikimirror/conf/wiki-location-api.conf;
109 | include /path/to/wikimirror/conf/wiki-location-main.conf;
110 | include /path/to/wikimirror/conf/wiki-location-static.conf;
111 | include /path/to/wikimirror/conf/wiki-location-upload-fix.conf;
112 | proxy_hide_header Upgrade;
113 | }
114 |
115 | server {
116 | server_name blog.example.org;
117 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
118 | set $hostdomain wikimedia;
119 | set $subdomain blog;
120 |
121 | location / {
122 | include /path/to/wikimirror/conf/wiki.conf;
123 | proxy_pass https://blog.wikimedia.org;
124 | proxy_set_header Host $subdomain.$hostdomain.org;
125 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
126 | }
127 | include /path/to/wikimirror/conf/wiki-location-static.conf;
128 | proxy_hide_header Upgrade;
129 | }
130 |
131 | server {
132 | server_name diff.example.org;
133 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
134 | set $hostdomain wikimedia;
135 | set $subdomain diff;
136 |
137 | location / {
138 | include /path/to/wikimirror/conf/wiki-sub.conf;
139 | include /path/to/wikimirror/conf/wiki.conf;
140 | proxy_pass https://diff.wikimedia.org;
141 | proxy_set_header Accept-Encoding "";
142 | proxy_set_header Host $subdomain.$hostdomain.org;
143 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
144 | }
145 | include /path/to/wikimirror/conf/wiki-location-static.conf;
146 | proxy_hide_header Upgrade;
147 | }
148 |
149 | server {
150 | server_name etherpad.example.org;
151 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
152 | set $hostdomain wikimedia;
153 | set $subdomain etherpad;
154 |
155 | location / {
156 | include /path/to/wikimirror/conf/wiki-sub.conf;
157 | include /path/to/wikimirror/conf/wiki.conf;
158 | proxy_pass https://wiki-IPAddress;
159 | proxy_hide_header Upgrade;
160 | proxy_set_header Accept-Encoding "";
161 | proxy_set_header Host $subdomain.$hostdomain.org;
162 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
163 | }
164 | location /socket.io {
165 | include /path/to/wikimirror/conf/wiki.conf;
166 | proxy_http_version 1.1;
167 | proxy_pass https://wiki-IPAddress/socket.io;
168 | proxy_read_timeout 300s;
169 | proxy_send_timeout 300s;
170 | proxy_set_header Connection $connection_upgrade;
171 | proxy_set_header Host $subdomain.$hostdomain.org;
172 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
173 | proxy_set_header Upgrade $http_upgrade;
174 | }
175 | include /path/to/wikimirror/conf/wiki-location-static.conf;
176 | }
177 |
178 | server {
179 | server_name gerrit.example.org;
180 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
181 | set $hostdomain wikimedia;
182 | set $subdomain gerrit;
183 |
184 | location / {
185 | rewrite ^\/r\/plugins\/gitiles\/wikipedia\/gadgets\/ProveIt\/\+\/master\/i18n\/zh-cn\.json(.*?)$ /r/plugins/gitiles/wikipedia/gadgets/ProveIt/+/master/i18n/zh-hans.json$1 break;
186 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
187 | include /path/to/wikimirror/conf/wiki-sub.conf;
188 | include /path/to/wikimirror/conf/wiki.conf;
189 | proxy_pass https://gerrit.wikimedia.org;
190 | proxy_hide_header access-control-allow-headers;
191 | proxy_hide_header access-control-allow-methods;
192 | proxy_hide_header access-control-allow-origin;
193 | proxy_set_header Accept-Encoding "";
194 | proxy_set_header Host $subdomain.$hostdomain.org;
195 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
196 | }
197 | include /path/to/wikimirror/conf/wiki-location-static.conf;
198 | proxy_hide_header Upgrade;
199 | }
200 |
201 | server {
202 | server_name gitlab.example.org;
203 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
204 | set $hostdomain wikimedia;
205 | set $subdomain gitlab;
206 |
207 | location / {
208 | include /path/to/wikimirror/conf/wiki-sub.conf;
209 | include /path/to/wikimirror/conf/wiki.conf;
210 | proxy_pass https://gitlab.wikimedia.org;
211 | proxy_set_header Accept-Encoding "";
212 | proxy_set_header Host $subdomain.$hostdomain.org;
213 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
214 | }
215 | include /path/to/wikimirror/conf/wiki-location-static.conf;
216 | proxy_hide_header Upgrade;
217 | }
218 |
219 | server {
220 | server_name idp.example.org;
221 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
222 | set $hostdomain wikimedia;
223 | set $subdomain idp;
224 |
225 | location / {
226 | include /path/to/wikimirror/conf/wiki-sub.conf;
227 | include /path/to/wikimirror/conf/wiki.conf;
228 | proxy_pass https://idp.wikimedia.org;
229 | proxy_set_header Accept-Encoding "";
230 | proxy_set_header Host $subdomain.$hostdomain.org;
231 | proxy_set_header Origin https://$subdomain.$hostdomain.org;
232 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
233 | }
234 | include /path/to/wikimirror/conf/wiki-location-static.conf;
235 | proxy_hide_header Upgrade;
236 | }
237 |
238 | server {
239 | server_name lists.example.org;
240 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
241 | set $hostdomain wikimedia;
242 | set $subdomain lists;
243 |
244 | location / {
245 | include /path/to/wikimirror/conf/wiki-sub.conf;
246 | include /path/to/wikimirror/conf/wiki.conf;
247 | proxy_pass https://lists.wikimedia.org;
248 | proxy_set_header Accept-Encoding "";
249 | proxy_set_header Host $subdomain.$hostdomain.org;
250 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
251 | }
252 | include /path/to/wikimirror/conf/wiki-location-static.conf;
253 | proxy_hide_header Upgrade;
254 | }
255 |
256 | server {
257 | server_name maps.example.org;
258 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
259 | set $hostdomain wikimedia;
260 | set $subdomain maps;
261 |
262 | location / {
263 | include /path/to/wikimirror/conf/wiki-sub.conf;
264 | include /path/to/wikimirror/conf/wiki.conf;
265 | proxy_pass https://upload-IPAddress;
266 | proxy_set_header Accept-Encoding "";
267 | proxy_set_header Host $subdomain.$hostdomain.org;
268 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
269 | }
270 | location /img {
271 | if ($arg_domain ~* (.*?)(\.wiki(?:books|data|functions|news|pedia|quote|versity|voyage)|\.?wikisource|\.wiktionary|\.mediawiki)\.example\.org) {
272 | set $arg_domain $1$2.org;
273 | return 301 https://$host$uri?lang=$arg_lang&domain=$arg_domain&title=$arg_title&groups=$arg_groups;
274 | }
275 | include /path/to/wikimirror/conf/wiki.conf;
276 | proxy_pass https://upload-IPAddress/img;
277 | proxy_set_header Host $subdomain.$hostdomain.org;
278 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
279 | }
280 | include /path/to/wikimirror/conf/wiki-location-static.conf;
281 | proxy_hide_header Upgrade;
282 | }
283 |
284 | server {
285 | server_name phabricator.example.org;
286 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
287 | set $hostdomain wikimedia;
288 | set $subdomain phabricator;
289 |
290 | location = / {
291 | include /path/to/wikimirror/conf/wiki-sub.conf;
292 | include /path/to/wikimirror/conf/wiki.conf;
293 | proxy_http_version 1.1;
294 | proxy_pass https://wiki-IPAddress;
295 | proxy_read_timeout 300s;
296 | proxy_send_timeout 300s;
297 | proxy_set_header Accept-Encoding "";
298 | proxy_set_header Connection $connection_upgrade;
299 | proxy_set_header Host $subdomain.$hostdomain.org;
300 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
301 | proxy_set_header Upgrade $http_upgrade;
302 | }
303 | location / {
304 | include /path/to/wikimirror/conf/wiki-sub.conf;
305 | include /path/to/wikimirror/conf/wiki.conf;
306 | proxy_pass https://wiki-IPAddress;
307 | proxy_hide_header Upgrade;
308 | proxy_set_header Accept-Encoding "";
309 | proxy_set_header Host $subdomain.$hostdomain.org;
310 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
311 | }
312 | include /path/to/wikimirror/conf/wiki-location-static.conf;
313 | }
314 |
315 | server {
316 | server_name policy.example.org;
317 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
318 | set $hostdomain wikimedia;
319 | set $subdomain policy;
320 |
321 | location / {
322 | include /path/to/wikimirror/conf/wiki-sub.conf;
323 | include /path/to/wikimirror/conf/wiki.conf;
324 | proxy_pass https://policy.wikimedia.org;
325 | proxy_set_header Accept-Encoding "";
326 | proxy_set_header Host $subdomain.$hostdomain.org;
327 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
328 | }
329 | include /path/to/wikimirror/conf/wiki-location-static.conf;
330 | proxy_hide_header Upgrade;
331 | }
332 |
333 | server {
334 | server_name stream.example.org;
335 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
336 | set $hostdomain wikimedia;
337 | set $subdomain stream;
338 |
339 | location / {
340 | include /path/to/wikimirror/conf/wiki-sub.conf;
341 | include /path/to/wikimirror/conf/wiki.conf;
342 | proxy_pass https://stream.wikimedia.org;
343 | proxy_hide_header Upgrade;
344 | proxy_set_header Accept-Encoding "";
345 | proxy_set_header Host $subdomain.$hostdomain.org;
346 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
347 | }
348 | location /v2/stream {
349 | include /path/to/wikimirror/conf/wiki.conf;
350 | proxy_http_version 1.1;
351 | proxy_pass https://stream.wikimedia.org/v2/stream;
352 | proxy_read_timeout 300s;
353 | proxy_send_timeout 300s;
354 | proxy_set_header Connection $connection_upgrade;
355 | proxy_set_header Host $subdomain.$hostdomain.org;
356 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
357 | proxy_set_header Upgrade $http_upgrade;
358 | }
359 | include /path/to/wikimirror/conf/wiki-location-static.conf;
360 | }
361 |
362 | server {
363 | server_name techblog.example.org;
364 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
365 | set $hostdomain wikimedia;
366 | set $subdomain techblog;
367 |
368 | location / {
369 | include /path/to/wikimirror/conf/wiki-sub.conf;
370 | include /path/to/wikimirror/conf/wiki.conf;
371 | proxy_pass https://techblog.wikimedia.org;
372 | proxy_set_header Accept-Encoding "";
373 | proxy_set_header Host $subdomain.$hostdomain.org;
374 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
375 | }
376 | include /path/to/wikimirror/conf/wiki-location-static.conf;
377 | proxy_hide_header Upgrade;
378 | }
379 |
380 | server {
381 | server_name ~^(?((?:m|www)\.)?)wikimediafoundation\.example\.org$;
382 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
383 | set $hostdomain wikimediafoundation;
384 |
385 | location / {
386 | include /path/to/wikimirror/conf/wiki-sub.conf;
387 | include /path/to/wikimirror/conf/wiki.conf;
388 | proxy_pass https://wikimediafoundation.org;
389 | proxy_set_header Accept-Encoding "";
390 | proxy_set_header Host $subdomain$hostdomain.org;
391 | proxy_set_header Referer https://$subdomain$hostdomain.org$request_uri;
392 | }
393 | include /path/to/wikimirror/conf/wiki-location-static.conf;
394 | proxy_hide_header Upgrade;
395 | }
396 |
397 | server {
398 | server_name wikitech-static.example.org;
399 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
400 | set $hostdomain wikimedia;
401 | set $subdomain wikitech-static;
402 |
403 | location / {
404 | include /path/to/wikimirror/conf/wiki-sub.conf;
405 | include /path/to/wikimirror/conf/wiki.conf;
406 | proxy_pass https://wikitech-static.wikimedia.org;
407 | proxy_set_header Accept-Encoding "";
408 | proxy_set_header Host $subdomain.$hostdomain.org;
409 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
410 | }
411 | include /path/to/wikimirror/conf/wiki-location-static.conf;
412 | proxy_hide_header Upgrade;
413 | }
414 |
415 | server {
416 | server_name intake-analytics.example.org intake-logging.example.org piwik.example.org;
417 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
418 |
419 | return 204;
420 | }
421 |
422 | server {
423 | server_name latex-png.example.org;
424 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
425 | set $hostdomain wikimedia;
426 |
427 | add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; img-src 'self'";
428 |
429 | location / {
430 | include /path/to/wikimirror/conf/wiki.conf;
431 | proxy_pass https://wiki-IPAddress/api/rest_v1/media/math/render/png/;
432 | proxy_hide_header set-cookie;
433 | proxy_set_header Host $hostdomain.org;
434 | proxy_set_header Referer https://$hostdomain.org$request_uri;
435 | }
436 | include /path/to/wikimirror/conf/wiki-location-static.conf;
437 | proxy_hide_header Upgrade;
438 | }
439 |
440 | server {
441 | server_name latex-svg.example.org;
442 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
443 | set $hostdomain wikimedia;
444 |
445 | location / {
446 | include /path/to/wikimirror/conf/wiki.conf;
447 | proxy_pass https://wiki-IPAddress/api/rest_v1/media/math/render/svg/;
448 | proxy_hide_header set-cookie;
449 | proxy_set_header Accept-Encoding "";
450 | proxy_set_header Host $hostdomain.org;
451 | proxy_set_header Referer https://$hostdomain.org$request_uri;
452 | }
453 | include /path/to/wikimirror/conf/wiki-location-static.conf;
454 | proxy_hide_header Upgrade;
455 | }
456 |
457 | server {
458 | server_name pageviews.example.org;
459 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
460 | set $hostdomain wikimedia;
461 |
462 | location / {
463 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
464 | if ($request_uri ~* ^\/.*?(?:\.wiki(?:books|data|news|pedia|quote|versity|voyage)|\.?wikisource|\.wiktionary|\.mediawiki)\.example\.org\/.*?$) {
465 | rewrite ^\/(.*?)(\.wiki(?:books|data|functions|news|pedia|quote|versity|voyage)|\.?wikisource|\.wiktionary|\.mediawiki)\.example\.org\/(.*?)$ /$1$2.org/$3 redirect;
466 | }
467 | include /path/to/wikimirror/conf/wiki-sub.conf;
468 | include /path/to/wikimirror/conf/wiki.conf;
469 | proxy_pass https://wiki-IPAddress;
470 | proxy_hide_header access-control-allow-headers;
471 | proxy_hide_header access-control-allow-methods;
472 | proxy_hide_header access-control-allow-origin;
473 | proxy_hide_header set-cookie;
474 | proxy_set_header Accept-Encoding "";
475 | proxy_set_header Host $hostdomain.org;
476 | proxy_set_header Referer https://$hostdomain.org$request_uri;
477 | }
478 | include /path/to/wikimirror/conf/wiki-location-static.conf;
479 | proxy_hide_header Upgrade;
480 | }
481 |
482 | server {
483 | server_name phab.example.org;
484 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
485 | set $hostdomain wmfusercontent;
486 | set $subdomain phab;
487 |
488 | location / {
489 | include /path/to/wikimirror/conf/wiki-sub.conf;
490 | include /path/to/wikimirror/conf/wiki.conf;
491 | proxy_pass https://phab.wmfusercontent.org;
492 | proxy_set_header Accept-Encoding "";
493 | proxy_set_header Host $subdomain.$hostdomain.org;
494 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
495 | }
496 | location /file {
497 | more_set_headers "Content-Security-Policy: default-src https://phab.example.org; base-uri 'none'; connect-src 'self'; form-action 'self'; frame-ancestors 'none'; frame-src 'self'; img-src https://phab.example.org data:; object-src 'none'; script-src https://phab.example.org; style-src https://phab.example.org 'unsafe-inline'";
498 | include /path/to/wikimirror/conf/wiki-sub.conf;
499 | include /path/to/wikimirror/conf/wiki.conf;
500 | proxy_pass https://phab.wmfusercontent.org/file;
501 | proxy_set_header Accept-Encoding "";
502 | proxy_set_header Host $subdomain.$hostdomain.org;
503 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
504 | }
505 | include /path/to/wikimirror/conf/wiki-location-static.conf;
506 | proxy_hide_header Upgrade;
507 | }
508 |
509 | server {
510 | server_name recommend.example.org;
511 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
512 |
513 | location / {
514 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
515 | include /path/to/wikimirror/conf/wiki-sub.conf;
516 | include /path/to/wikimirror/conf/wiki.conf;
517 | proxy_pass https://recommend.wmflabs.org;
518 | proxy_hide_header access-control-allow-headers;
519 | proxy_hide_header access-control-allow-methods;
520 | proxy_hide_header access-control-allow-origin;
521 | proxy_hide_header set-cookie;
522 | proxy_hide_header x-clacks-overhead;
523 | proxy_set_header Accept-Encoding "";
524 | proxy_set_header Host recommend.wmflabs.org;
525 | proxy_set_header Referer https://recommend.wmflabs.org$request_uri;
526 | }
527 | include /path/to/wikimirror/conf/wiki-location-static.conf;
528 | proxy_hide_header Upgrade;
529 | }
530 |
531 | server {
532 | server_name upload.example.org;
533 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
534 | set $hostdomain wikimedia;
535 | set $subdomain upload;
536 |
537 | location / {
538 | include /path/to/wikimirror/conf/wiki.conf;
539 | proxy_pass https://upload-IPAddress;
540 | proxy_set_header Accept-Encoding "";
541 | proxy_set_header Host $subdomain.$hostdomain.org;
542 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
543 | }
544 | location /wikimirror/zh/darkmode {
545 | proxy_pass http://static-IPAddress/images/darkmode;
546 | proxy_set_header Host static-internal.example.org;
547 | }
548 | include /path/to/wikimirror/conf/wiki-location-static.conf;
549 | proxy_hide_header Upgrade;
550 | }
551 |
552 | server {
553 | server_name wma.example.org;
554 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
555 | set $hostdomain wmcloud;
556 | set $subdomain wma;
557 |
558 | location / {
559 | include /path/to/wikimirror/conf/wiki-sub.conf;
560 | include /path/to/wikimirror/conf/wiki.conf;
561 | proxy_pass https://wma.wmcloud.org;
562 | proxy_set_header Accept-Encoding "";
563 | proxy_set_header Host $subdomain.$hostdomain.org;
564 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
565 | }
566 | include /path/to/wikimirror/conf/wiki-location-static.conf;
567 | proxy_hide_header Upgrade;
568 | }
569 |
570 | server {
571 | server_name xtools-api.example.org;
572 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
573 |
574 | location / {
575 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
576 | if ($request_uri ~* ^\/.*?(?:\.wiki(?:books|data|news|pedia|quote|versity|voyage)|\.?wikisource|\.wiktionary|\.mediawiki)\.example\.org\/.*?$) {
577 | rewrite ^\/(.*?)(\.wiki(?:books|data|functions|news|pedia|quote|versity|voyage)|\.?wikisource|\.wiktionary|\.mediawiki)\.example\.org\/(.*?)$ /$1$2.org/$3 redirect;
578 | }
579 | error_page 404 = @errors;
580 | include /path/to/wikimirror/conf/wiki.conf;
581 | proxy_pass https://xtools.wmcloud.org/api/;
582 | proxy_hide_header access-control-allow-headers;
583 | proxy_hide_header access-control-allow-methods;
584 | proxy_hide_header access-control-allow-origin;
585 | proxy_hide_header set-cookie;
586 | proxy_hide_header x-clacks-overhead;
587 | proxy_intercept_errors on;
588 | proxy_set_header Accept-Encoding "";
589 | proxy_set_header Host xtools.wmcloud.org;
590 | proxy_set_header Referer https://xtools.wmcloud.org$request_uri;
591 | }
592 | location @errors {
593 | return 204;
594 | }
595 | include /path/to/wikimirror/conf/wiki-location-static.conf;
596 | proxy_hide_header Upgrade;
597 | }
598 |
599 | server {
600 | server_name 20.wikipedia.example.org;
601 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
602 |
603 | return 302 https://wikimediafoundation.example.org/wikipedia20/;
604 | }
605 |
606 | server {
607 | server_name ~^(?(m\.)?)wikisource\.example\.org$;
608 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
609 | set $hostdomain wikisource;
610 |
611 | location / {
612 | include /path/to/wikimirror/conf/wiki-sub.conf;
613 | include /path/to/wikimirror/conf/wiki.conf;
614 | proxy_pass https://wiki-IPAddress;
615 | proxy_set_header Accept-Encoding "";
616 | proxy_set_header Host $subdomain$hostdomain.org;
617 | proxy_set_header Referer https://$subdomain$hostdomain.org$request_uri;
618 | }
619 | location /beacon {
620 | return 204;
621 | }
622 | location /api/rest_v1 {
623 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
624 | include /path/to/wikimirror/conf/wiki-sub.conf;
625 | include /path/to/wikimirror/conf/wiki.conf;
626 | proxy_pass https://wiki-IPAddress;
627 | proxy_hide_header access-control-allow-headers;
628 | proxy_hide_header access-control-allow-methods;
629 | proxy_hide_header access-control-allow-origin;
630 | proxy_set_header Accept-Encoding "";
631 | proxy_set_header Host $subdomain$hostdomain.org;
632 | proxy_set_header Referer https://$subdomain$hostdomain.org$request_uri;
633 | }
634 | location /api/rest_v1/page/pdf {
635 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
636 | include /path/to/wikimirror/conf/wiki.conf;
637 | proxy_pass https://wiki-IPAddress;
638 | proxy_hide_header access-control-allow-headers;
639 | proxy_hide_header access-control-allow-methods;
640 | proxy_hide_header access-control-allow-origin;
641 | proxy_set_header Host $subdomain.$hostdomain.org;
642 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
643 | }
644 | location /w/api.php {
645 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
646 | include /path/to/wikimirror/conf/wiki-sub.conf;
647 | include /path/to/wikimirror/conf/wiki.conf;
648 | proxy_pass https://wiki-IPAddress/w/api.php;
649 | proxy_hide_header access-control-allow-headers;
650 | proxy_hide_header access-control-allow-methods;
651 | proxy_hide_header access-control-allow-origin;
652 | proxy_set_header Accept-Encoding "";
653 | proxy_set_header Host $subdomain$hostdomain.org;
654 | proxy_set_header Referer https://$subdomain$hostdomain.org$request_uri;
655 | }
656 | location /w/index.php {
657 | more_set_headers "Access-Control-Allow-Headers: $http_access_control_request_headers" "Access-Control-Allow-Methods: GET, HEAD, POST" "Access-Control-Allow-Origin: $http_origin";
658 | include /path/to/wikimirror/conf/wiki-sub.conf;
659 | include /path/to/wikimirror/conf/wiki.conf;
660 | proxy_pass https://wiki-IPAddress/w/index.php;
661 | proxy_hide_header access-control-allow-headers;
662 | proxy_hide_header access-control-allow-methods;
663 | proxy_hide_header access-control-allow-origin;
664 | proxy_set_header Accept-Encoding "";
665 | proxy_set_header Host $subdomain$hostdomain.org;
666 | proxy_set_header Referer https://$subdomain$hostdomain.org$request_uri;
667 | }
668 | include /path/to/wikimirror/conf/wiki-location-static.conf;
669 | proxy_hide_header Upgrade;
670 | }
671 |
672 | server {
673 | server_name ~^(?[^.]+(?:\.m)?)?\.planet\.example\.org$;
674 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
675 | set $hostdomain planet.wikimedia;
676 |
677 | include /path/to/wikimirror/conf/wiki-location-main.conf;
678 | include /path/to/wikimirror/conf/wiki-location-static.conf;
679 | proxy_hide_header Upgrade;
680 | }
681 |
682 | server {
683 | server_name ~^(?[^.]+(?:\.m)?)?\.(?(wiki(?:books|data|functions|news|pedia|quote|source|versity|voyage)|wiktionary|mediawiki))\.example\.org$;
684 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
685 |
686 | if ($subdomain ~* ^(?:(?:m|www)\.m)$) {
687 | return 301 https://www.$hostdomain.example.org;
688 | }
689 |
690 | include /path/to/wikimirror/conf/wiki-location-api.conf;
691 | include /path/to/wikimirror/conf/wiki-location-main.conf;
692 | include /path/to/wikimirror/conf/wiki-location-static.conf;
693 | include /path/to/wikimirror/conf/wiki-location-upload-fix.conf;
694 | proxy_hide_header Upgrade;
695 | }
696 |
697 | server {
698 | server_name www.example.org;
699 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
700 | set $hostdomain wikimedia;
701 | set $subdomain www;
702 |
703 | error_page 400 403 404 500 = https://www.example.org;
704 |
705 | location / {
706 | return 302 https://www.wikipedia.example.org;
707 | }
708 | location ^~ /static/images/wmf {
709 | include /path/to/wikimirror/conf/wiki.conf;
710 | proxy_pass https://wiki-IPAddress;
711 | proxy_hide_header set-cookie;
712 | proxy_set_header Host $subdomain.$hostdomain.org;
713 | proxy_set_header Referer https://$subdomain.$hostdomain.org$request_uri;
714 | }
715 | include /path/to/wikimirror/conf/wiki-location-static.conf;
716 | proxy_hide_header Upgrade;
717 | }
718 |
719 | server {
720 | server_name ~^(?[^.]+(?:\.(?:m|wikimediafoundation))?)?\.example\.org$;
721 | include /path/to/wikimirror/conf/wiki-site-ssl.conf;
722 |
723 | error_page 400 403 404 500 = https://www.example.org;
724 |
725 | if ($subdomain ~* ^(?:m(?:\.m)?|www\.m)$) {
726 | return 301 https://www.wikipedia.example.org;
727 | }
728 |
729 | location / {
730 | return 302 https://$subdomain.wikipedia.example.org;
731 | }
732 | include /path/to/wikimirror/conf/wiki-location-static.conf;
733 | }
--------------------------------------------------------------------------------
/nginx.conf:
--------------------------------------------------------------------------------
1 | ...
2 |
3 | worker_rlimit_nofile 65535;
4 | pcre_jit on;
5 |
6 | events {
7 | ...
8 |
9 | accept_mutex on;
10 | multi_accept on;
11 | use epoll;
12 | worker_connections 65535;
13 | }
14 |
15 | http {
16 | ...
17 |
18 | set_real_ip_from 0.0.0.0/0;
19 | real_ip_header X-Forwarded-For;
20 |
21 | client_header_buffer_size 4k;
22 | large_client_header_buffers 32 8k;
23 | proxy_buffers 32 32k;
24 | proxy_buffer_size 128k;
25 | proxy_busy_buffers_size 256k;
26 |
27 | ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA;
28 | ssl_protocols TLSv1.2 TLSv1.3;
29 | ssl_prefer_server_ciphers on;
30 | ssl_stapling on;
31 | ssl_stapling_verify on;
32 |
33 | # http2 on; # 需要Nginx >= 1.25.1
34 |
35 | include /path/to/wikimirror/conf/wiki.nginx;
36 | }
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki-1.5x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki-1.5x.png
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki-2x.png
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki-hans-1.5x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki-hans-1.5x.png
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki-hans-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki-hans-2x.png
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki-hans.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki-hans.png
--------------------------------------------------------------------------------
/static/images/darkmode/zhwiki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/static/images/darkmode/zhwiki.png
--------------------------------------------------------------------------------
/static/robots.txt:
--------------------------------------------------------------------------------
1 | User-Agent: *
2 | Disallow: /
--------------------------------------------------------------------------------
/static/wikimirror.css:
--------------------------------------------------------------------------------
1 | /**
2 | * WikiMirror - A Wikimedia Projects Reverse Proxy based on Nginx
3 | *
4 | * Copyright (c) 2019-present, 安忆.
5 | *
6 | * @author 安忆
7 | * @file wikimirror.css
8 | * @license GPL v3
9 | * @link
10 | */.WikiMirrorNotice{background:#fff;border:.1rem solid #0645ad;cursor:default;direction:ltr;display:flex;justify-content:center;text-align:center;-webkit-user-select:none;user-select:none}.skin-minerva .WikiMirrorNotice{background:transparent;border:.1rem solid #fff;color:inherit}.WikiMirrorNotice>*:first-child{border-right:.1rem dotted #0645ad;font-size:.8em;font-weight:500;line-height:1.8;margin:0;min-width:calc(100% - 3rem);padding:.4em!important;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;word-break:break-word}.skin-minerva .WikiMirrorNotice>*:first-child{border-right:.1em dotted #fff}.WikiMirrorNotice button{background:#fff;border:0;color:inherit;cursor:pointer;font-family:inherit;font-size:.8em;padding:.4em 0;width:3rem}.WikiMirrorNotice button:active,.WikiMirrorNotice button:focus,.WikiMirrorNotice button:hover{background:#f7f7f7;color:#0645ad}.skin-minerva .WikiMirrorNotice button{background:transparent;color:inherit}.skin-minerva .WikiMirrorNotice button:active,.skin-minerva .WikiMirrorNotice button:focus,.skin-minerva .WikiMirrorNotice button:hover{background:#fff3}.skin-minerva .WikiMirrorTip{border:.1rem solid #0645ad}.WikiMirrorTip>*:first-child{font-size:.7em;border-right:0}.skin-minerva div.mw-highlight{background-color:#f8f8f8}.skin-minerva dl dd{overflow:unset}.skin-minerva ul.mw-contributions-list .comment,.skin-minerva ul.special .comment{word-break:break-word}.skin-minerva .mw-highlight pre{position:unset}.skin-minerva .mw-notification-area{z-index:5}.skin-minerva #footer-places-cookiestatement:after{display:none}.skin-timeless .content-table-left,.skin-timeless .content-table-right{height:auto!important}.skin-timeless .infobox caption,.skin-timeless .wikitable>caption{width:auto!important}.skin-timeless .catlinks-allhidden{display:none!important}.skin-timeless #catlinks-sidebar{display:none}.skin-timeless #catlinks{background:#f8f9fa;border:solid #eaecf0;border-width:1px 1px .2em;box-shadow:0 1px 2px 1px #00000005;display:inherit;font-size:.95em;margin:1em 0 0;padding:1em 2em}.skin-timeless #catlinks div{margin:0 0 .35em}.skin-timeless #catlinks div:last-of-type{margin:0}.skin-timeless #catlinks li{border-left:0}.mw-parser-output a.external,sup.reference{-webkit-user-select:none;user-select:none}.mw-parser-output a.external.free,.mw-parser-output a.external.text{-webkit-user-select:unset;user-select:unset}.oo-ui-windowManager-modal>.oo-ui-dialog{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.minerva-icon--wikimirror-darkmode{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20fill%3D%22%2354595d%22%20d%3D%22M5%201a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V3a2%202%200%200%200-2-2zm0%203h5v1H5zm0%202h5v1H5zm0%202h5v1H5zm10%207H5v-1h10zm0-2H5v-1h10zm0-2H5v-1h10zm0-2h-4V4h4z%22%2F%3E%3C%2Fsvg%3E)}.mw-ui-icon-portletlink-wikimirror-difflink{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cg%20fill%3D%22%2354595d%22%3E%3Cpath%20d%3D%22M4.83%2015h2.91a4.88%204.88%200%2001-1.55-2H5a3%203%200%20110-6h3a3%203%200%20012.82%204h2.1a4.82%204.82%200%2000.08-.83v-.34A4.83%204.83%200%20008.17%205H4.83A4.83%204.83%200%20000%209.83v.34A4.83%204.83%200%20004.83%2015z%22%2F%3E%3Cpath%20d%3D%22M15.17%205h-2.91a4.88%204.88%200%20011.55%202H15a3%203%200%20110%206h-3a3%203%200%2001-2.82-4h-2.1a4.82%204.82%200%2000-.08.83v.34A4.83%204.83%200%200011.83%2015h3.34A4.83%204.83%200%200020%2010.17v-.34A4.83%204.83%200%200015.17%205z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E)}#frbanner,#frbanner2{display:none!important}#ipe-edit-toolbox{bottom:24px!important;right:68px!important}html{tab-size:4}pre,.mw-code,.mw-highlight,.ve-init-mw-desktopArticleTarget .CodeMirror-code,.ve-init-mw-desktopArticleTarget .CodeMirror-code *,.ve-init-mw-desktopArticleTarget .ve-ui-mwWikitextSurface .ve-ce-paragraphNode{line-break:anywhere!important;white-space:pre-wrap!important;word-break:break-all!important;word-wrap:break-word!important}@media only screen{html.wikimirror-darkmode,.wikimirror-darkmode iframe{filter:invert(.95) hue-rotate(.5turn)}.wikimirror-darkmode,.wikimirror-darkmode canvas:not(.mw-invert),.wikimirror-darkmode img:not(.mw-invert),.wikimirror-darkmode ogvjs,.wikimirror-darkmode svg:not(.mw-invert),.wikimirror-darkmode video,.wikimirror-darkmode .cdx-no-invert,.wikimirror-darkmode .frb-image,.wikimirror-darkmode .image-carousel,.wikimirror-darkmode .k-player.fullscreen,.wikimirror-darkmode .k-player .ttmlStyled,.wikimirror-darkmode .list-thumb:not(.list-thumb-none),.wikimirror-darkmode .mw-mmv-main.jq-fullscreened,.wikimirror-darkmode .mw-no-invert,.wikimirror-darkmode .mw-tmh-play-icon,.wikimirror-darkmode .mwe-upwiz-thumbnail,.wikimirror-darkmode .vjs-fullscreen,.wikimirror-darkmode .vjs-text-track-display,.wikimirror-darkmode #mp-2012-banner-logo{filter:invert(1) hue-rotate(.5turn)}.wikimirror-darkmode .mw-mmv-image img.blurred{filter:blur(3px) invert(1) hue-rotate(.5turn)!important}.wikimirror-darkmode img,.wikimirror-darkmode .minerva-icon,.wikimirror-darkmode .mw-wiki-logo,.wikimirror-darkmode #mp-2012-banner,.wikimirror-darkmode #mp-2012-banner-logo{opacity:.8;transition:opacity .5s ease-in-out}.wikimirror-darkmode img:hover{opacity:1}.wikimirror-darkmode .branding-box img:hover,.wikimirror-darkmode .minerva-footer img:hover,.wikimirror-darkmode .mw-logo-container img:hover,.wikimirror-darkmode .mw-logo-icon:hover,.wikimirror-darkmode .mw-wiki-logo.timeless-logo img:hover,.wikimirror-darkmode #p-banner img:hover,.wikimirror-darkmode #sidebarCollapse:hover{opacity:.8}.wikimirror-darkmode .filehistory img,.wikimirror-darkmode .mw-ext-score img,.wikimirror-darkmode .mw-mmv-image *,.wikimirror-darkmode .mwe-math-element *,.wikimirror-darkmode #file img,.wikimirror-darkmode #gallerypreview img{opacity:1}.wikimirror-darkmode img[alt*=-at-],.wikimirror-darkmode img[alt*="- at -"],.wikimirror-darkmode img[alt*=Lightblue],.wikimirror-darkmode img[alt*="Wikimedia-logo black"],.wikimirror-darkmode img[alt=詩詞賞析],.wikimirror-darkmode img[src*=Blue-bg],.wikimirror-darkmode img[src*=Bluebg],.wikimirror-darkmode img[src*=Black_x],.wikimirror-darkmode img[src*=China_char],.wikimirror-darkmode img[src*=CWLA],.wikimirror-darkmode img[src*=CWMoA],.wikimirror-darkmode img[src*=CWS],.wikimirror-darkmode img[src*=Inkscape_Logo],.wikimirror-darkmode img[src*=Qiuwen],.wikimirror-darkmode img[src*="_Shadow."],.wikimirror-darkmode img[src*="Weiji.svg"],.wikimirror-darkmode img[src*=Wikimedia-logo_black],.wikimirror-darkmode img[src*="Wikipedia%27s_W"],.wikimirror-darkmode img[src*=wikipedia-wordmark],.wikimirror-darkmode img[src*=Wikipedia_wordmark],.wikimirror-darkmode img[src*=Wikipedian_Journal_Title],.wikimirror-darkmode .branding-box img,.wikimirror-darkmode .cdx-icon svg,.wikimirror-darkmode .mainpage_box h3 .header_icon img,.wikimirror-darkmode .minerva-footer img,.wikimirror-darkmode .mw-logo-container img,.wikimirror-darkmode .mw-ext-score img,.wikimirror-darkmode .wd-mp-headerimage,.wikimirror-darkmode .wikipedia-ko.main-box .main-shortcut-item img,.wikimirror-darkmode .wvui-icon svg,.wikimirror-darkmode #mf-wel img,.wikimirror-darkmode #p-banner img,.wikimirror-darkmode #portal img,.wikimirror-darkmode #topics-list img{filter:invert(0)}.wikimirror-darkmode body.skin-timeless,.wikimirror-darkmode .drawer-container__mask,.wikimirror-darkmode .main-menu-mask,.wikimirror-darkmode .mw-mmv-image,.wikimirror-darkmode .mw-tmh-media-dialog .oo-ui-dialog-content>.oo-ui-window-body .oo-ui-layout,.wikimirror-darkmode .overlay.media-viewer,.wikimirror-darkmode .video-js,.wikimirror-darkmode .vjs-poster,.wikimirror-darkmode #menus-cover{background-color:#f7f7f7!important}.wikimirror-darkmode .diff-addedline .diffchange{background:#7fd7c4}.wikimirror-darkmode .diff-deletedline .diffchange{background:#e88e89}.wikimirror-darkmode .mw-kartographer-mapDialog-map{background-color:#000}.wikimirror-darkmode .mwe-popups{border:10px solid #c8ccd1;border-radius:10px;box-shadow:none}.wikimirror-darkmode #mw-footer-container a,.wikimirror-darkmode .skin-modern .mw-editsection *,.wikimirror-darkmode .skin-modern .Wikiplus-Edit-SectionBtn{color:#36c}.wikimirror-darkmode .locmap .pr{color:#fff}.wikimirror-darkmode .skin-minerva .main-menu-mask{background:#0003}.wikimirror-darkmode .skin-timeless h1.firstHeading,.wikimirror-darkmode .skin-timeless .mw-footer-container,.wikimirror-darkmode .skin-timeless #mw-content-container,.wikimirror-darkmode .skin-timeless #mw-header-hack,.wikimirror-darkmode .skin-timeless #mw-header-nav-hack{box-shadow:none}.wikimirror-darkmode .skin-timeless h1.firstHeading,.wikimirror-darkmode .skin-timeless #mw-content-container{border-bottom:solid 4px #c8ccd1}.wikimirror-darkmode .skin-timeless .mw-footer-container{border-top:0}.wikimirror-darkmode .skin-timeless #mw-header-hack .color-left,.wikimirror-darkmode .skin-timeless #mw-header-hack .color-middle,.wikimirror-darkmode .skin-timeless #mw-header-hack .color-right,.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-left,.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-middle,.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-right{background:#c8ccd1}.wikimirror-darkmode #scrollDownButton,.wikimirror-darkmode #scrollDownButton-zhwiki,.wikimirror-darkmode #scrollUpButton,.wikimirror-darkmode #scrollUpButton-zhwiki{transition:unset}.wikimirror-darkmode input:not([type]),.wikimirror-darkmode textarea:not([type]),.wikimirror-darkmode .in-page-edit .CodeMirror{background:#eaecf0!important}.wikimirror-darkmode input:not([type]),.wikimirror-darkmode textarea:not([type]),.wikimirror-darkmode .mw-mmv-image .error-box,.wikimirror-darkmode .skin-minerva .search-box .search,.wikimirror-darkmode .skin-timeless .mw-footer-container,.wikimirror-darkmode .skin-timeless #searchInput,.wikimirror-darkmode .in-page-edit .CodeMirror{color:#000!important}.wikimirror-darkmode .swagger-ui .topbar{background-color:#e3e3e3}.wikimirror-darkmode .site-footer#colophon{filter:invert(1) hue-rotate(.5turn)}.wikimirror-darkmode body.ui-gray .navbar-gitlab{background-color:#fff}.wikimirror-darkmode .phui-comment-image,.wikimirror-darkmode .phui-curtain-object-ref-view-image-cell,.wikimirror-darkmode .phui-icon-view,.wikimirror-darkmode .phui-oi-image,.wikimirror-darkmode .phui-timeline-image,.wikimirror-darkmode .phabricator-main-menu-eye,.wikimirror-darkmode .phabricator-wordmark{filter:invert(1) hue-rotate(.5turn)}.wikimirror-darkmode .phui-theme-blue .phabricator-main-menu-background{background:#fff}.wikimirror-darkmode body[id*=www] [data-el-section="other projects"] .app-badges .sprite,.wikimirror-darkmode body[id*=www] [data-el-section="other projects"] .other-project-icon{filter:invert(1) hue-rotate(.5turn)}.wikimirror-darkmode body[id*=www] [data-jsl10n="portal.slogan"]{color:#000}.wikimirror-darkmode #eventstreams-ui-app .nav-bar{background-color:#fff}.wikimirror-darkmode #eventstreams-ui-app .nav-bar a{color:#000!important}}@media only screen and (max-width: 550px){.skin-monobook #echo-hack-badges,.skin-monobook #globalWrapper-toggle{display:none}}@media only screen and (max-width: 850px){.skin-timeless .diff{width:100%!important}.skin-timeless .mw-body table{width:auto;word-break:break-all}.skin-timeless .mw-body table table{width:100%}}@media only screen and (min-width: 1340px){.skin-timeless #site-tools{position:-webkit-sticky;position:sticky;top:4.475em}}@media print{.noprint{display:none!important}}
11 | /*# sourceMappingURL=wikimirror.css.map */
12 |
--------------------------------------------------------------------------------
/static/wikimirror.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "sources": ["../../src/public/wikimirror.css"],
4 | "sourcesContent": ["/**\r\n * WikiMirror - A Wikimedia Projects Reverse Proxy based on Nginx\r\n *\r\n * Copyright (c) 2019-present, 安忆.\r\n *\r\n * @author 安忆 \r\n * @file wikimirror.css\r\n * @license GPL v3\r\n * @link \r\n */\r\n.WikiMirrorNotice {\r\n\tbackground: #fff;\r\n\tborder: 0.1rem solid #0645ad;\r\n\tcursor: default;\r\n\tdirection: ltr;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\ttext-align: center;\r\n\t-webkit-user-select: none;\r\n\t user-select: none;\r\n}\r\n\r\n.skin-minerva .WikiMirrorNotice {\r\n\tbackground: transparent;\r\n\tborder: 0.1rem solid #fff;\r\n\tcolor: inherit;\r\n}\r\n\r\n.WikiMirrorNotice > *:first-child {\r\n\tborder-right: 0.1rem dotted #0645ad;\r\n\tfont-size: 0.8em;\r\n\tfont-weight: 500;\r\n\tline-height: 1.8;\r\n\tmargin: 0;\r\n\tmin-width: calc(100% - 3rem);\r\n\tpadding: 0.4em !important;\r\n\twidth: -webkit-fit-content;\r\n\twidth: -moz-fit-content;\r\n\twidth: fit-content;\r\n\tword-break: break-word;\r\n}\r\n\r\n.skin-minerva .WikiMirrorNotice > *:first-child {\r\n\tborder-right: 0.1em dotted #fff;\r\n}\r\n\r\n.WikiMirrorNotice button {\r\n\tbackground: #fff;\r\n\tborder: 0;\r\n\tcolor: inherit;\r\n\tcursor: pointer;\r\n\tfont-family: inherit;\r\n\tfont-size: 0.8em;\r\n\tpadding: 0.4em 0;\r\n\twidth: 3rem;\r\n}\r\n\r\n.WikiMirrorNotice button:active,\r\n.WikiMirrorNotice button:focus,\r\n.WikiMirrorNotice button:hover {\r\n\tbackground: #f7f7f7;\r\n\tcolor: #0645ad;\r\n}\r\n\r\n.skin-minerva .WikiMirrorNotice button {\r\n\tbackground: transparent;\r\n\tcolor: inherit;\r\n}\r\n\r\n.skin-minerva .WikiMirrorNotice button:active,\r\n.skin-minerva .WikiMirrorNotice button:focus,\r\n.skin-minerva .WikiMirrorNotice button:hover {\r\n\tbackground: rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.skin-minerva .WikiMirrorTip {\r\n\tborder: 0.1rem solid #0645ad;\r\n}\r\n\r\n.WikiMirrorTip > *:first-child {\r\n\tfont-size: 0.7em;\r\n\tborder-right: 0;\r\n}\r\n\r\n.skin-minerva div.mw-highlight {\r\n\tbackground-color: #f8f8f8;\r\n}\r\n\r\n.skin-minerva dl dd {\r\n\toverflow: unset;\r\n}\r\n\r\n.skin-minerva ul.mw-contributions-list .comment,\r\n.skin-minerva ul.special .comment {\r\n\tword-break: break-word;\r\n}\r\n\r\n.skin-minerva .mw-highlight pre {\r\n\tposition: unset;\r\n}\r\n\r\n.skin-minerva .mw-notification-area {\r\n\tz-index: 5;\r\n}\r\n\r\n.skin-minerva #footer-places-cookiestatement::after {\r\n\tdisplay: none;\r\n}\r\n\r\n.skin-timeless .content-table-left,\r\n.skin-timeless .content-table-right {\r\n\theight: auto !important;\r\n}\r\n\r\n.skin-timeless .infobox caption,\r\n.skin-timeless .wikitable > caption {\r\n\twidth: auto !important;\r\n}\r\n\r\n.skin-timeless .catlinks-allhidden {\r\n\tdisplay: none !important;\r\n}\r\n\r\n.skin-timeless #catlinks-sidebar {\r\n\tdisplay: none;\r\n}\r\n\r\n.skin-timeless #catlinks {\r\n\tbackground: #f8f9fa;\r\n\tborder: solid #eaecf0;\r\n\tborder-width: 1px 1px 0.2em;\r\n\tbox-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.02);\r\n\tdisplay: inherit;\r\n\tfont-size: 0.95em;\r\n\tmargin: 1em 0 0;\r\n\tpadding: 1em 2em;\r\n}\r\n\r\n.skin-timeless #catlinks div {\r\n\tmargin: 0 0 0.35em;\r\n}\r\n\r\n.skin-timeless #catlinks div:last-of-type {\r\n\tmargin: 0;\r\n}\r\n\r\n.skin-timeless #catlinks li {\r\n\tborder-left: 0;\r\n}\r\n\r\n.mw-parser-output a.external,\r\nsup.reference {\r\n\t-webkit-user-select: none;\r\n\t user-select: none;\r\n}\r\n\r\n.mw-parser-output a.external.free,\r\n.mw-parser-output a.external.text {\r\n\t-webkit-user-select: unset;\r\n\t user-select: unset;\r\n}\r\n\r\n.oo-ui-windowManager-modal > .oo-ui-dialog {\r\n\t-webkit-backdrop-filter: blur(5px);\r\n\t backdrop-filter: blur(5px);\r\n}\r\n\r\n.minerva-icon--wikimirror-darkmode {\r\n\tbackground-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20fill%3D%22%2354595d%22%20d%3D%22M5%201a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V3a2%202%200%200%200-2-2zm0%203h5v1H5zm0%202h5v1H5zm0%202h5v1H5zm10%207H5v-1h10zm0-2H5v-1h10zm0-2H5v-1h10zm0-2h-4V4h4z%22%2F%3E%3C%2Fsvg%3E');\r\n}\r\n\r\n.mw-ui-icon-portletlink-wikimirror-difflink {\r\n\tbackground-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cg%20fill%3D%22%2354595d%22%3E%3Cpath%20d%3D%22M4.83%2015h2.91a4.88%204.88%200%2001-1.55-2H5a3%203%200%20110-6h3a3%203%200%20012.82%204h2.1a4.82%204.82%200%2000.08-.83v-.34A4.83%204.83%200%20008.17%205H4.83A4.83%204.83%200%20000%209.83v.34A4.83%204.83%200%20004.83%2015z%22%2F%3E%3Cpath%20d%3D%22M15.17%205h-2.91a4.88%204.88%200%20011.55%202H15a3%203%200%20110%206h-3a3%203%200%2001-2.82-4h-2.1a4.82%204.82%200%2000-.08.83v.34A4.83%204.83%200%200011.83%2015h3.34A4.83%204.83%200%200020%2010.17v-.34A4.83%204.83%200%200015.17%205z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E');\r\n}\r\n\r\n#frbanner,\r\n#frbanner2 {\r\n\tdisplay: none !important;\r\n}\r\n\r\n#ipe-edit-toolbox {\r\n\tbottom: 24px !important;\r\n\tright: 68px !important;\r\n}\r\n\r\nhtml {\r\n\ttab-size: 4;\r\n}\r\n\r\npre,\r\n.mw-code,\r\n.mw-highlight,\r\n.ve-init-mw-desktopArticleTarget .CodeMirror-code,\r\n.ve-init-mw-desktopArticleTarget .CodeMirror-code *,\r\n.ve-init-mw-desktopArticleTarget .ve-ui-mwWikitextSurface .ve-ce-paragraphNode {\r\n\tline-break: anywhere !important;\r\n\twhite-space: pre-wrap !important;\r\n\tword-break: break-all !important;\r\n\tword-wrap: break-word !important;\r\n}\r\n\r\n@media only screen {\r\n\thtml.wikimirror-darkmode,\r\n\t.wikimirror-darkmode iframe {\r\n\t\tfilter: invert(0.95) hue-rotate(0.5turn);\r\n\t}\r\n\t.wikimirror-darkmode,\r\n\t.wikimirror-darkmode canvas:not(.mw-invert),\r\n\t.wikimirror-darkmode img:not(.mw-invert),\r\n\t.wikimirror-darkmode ogvjs,\r\n\t.wikimirror-darkmode svg:not(.mw-invert),\r\n\t.wikimirror-darkmode video,\r\n\t.wikimirror-darkmode .cdx-no-invert,\r\n\t.wikimirror-darkmode .frb-image,\r\n\t.wikimirror-darkmode .image-carousel,\r\n\t.wikimirror-darkmode .k-player.fullscreen,\r\n\t.wikimirror-darkmode .k-player .ttmlStyled,\r\n\t.wikimirror-darkmode .list-thumb:not(.list-thumb-none),\r\n\t.wikimirror-darkmode .mw-mmv-main.jq-fullscreened,\r\n\t.wikimirror-darkmode .mw-no-invert,\r\n\t.wikimirror-darkmode .mw-tmh-play-icon,\r\n\t.wikimirror-darkmode .mwe-upwiz-thumbnail,\r\n\t.wikimirror-darkmode .vjs-fullscreen,\r\n\t.wikimirror-darkmode .vjs-text-track-display,\r\n\t.wikimirror-darkmode #mp-2012-banner-logo {\r\n\t\tfilter: invert(1) hue-rotate(0.5turn);\r\n\t}\r\n\t.wikimirror-darkmode .mw-mmv-image img.blurred {\r\n\t\tfilter: blur(3px) invert(1) hue-rotate(0.5turn) !important;\r\n\t}\r\n\t.wikimirror-darkmode img,\r\n\t.wikimirror-darkmode .minerva-icon,\r\n\t.wikimirror-darkmode .mw-wiki-logo,\r\n\t.wikimirror-darkmode #mp-2012-banner,\r\n\t.wikimirror-darkmode #mp-2012-banner-logo {\r\n\t\topacity: 0.8;\r\n\t\ttransition: opacity 0.5s ease-in-out;\r\n\t}\r\n\t.wikimirror-darkmode img:hover {\r\n\t\topacity: 1;\r\n\t}\r\n\t.wikimirror-darkmode .branding-box img:hover,\r\n\t.wikimirror-darkmode .minerva-footer img:hover,\r\n\t.wikimirror-darkmode .mw-logo-container img:hover,\r\n\t.wikimirror-darkmode .mw-logo-icon:hover,\r\n\t.wikimirror-darkmode .mw-wiki-logo.timeless-logo img:hover,\r\n\t.wikimirror-darkmode #p-banner img:hover,\r\n\t.wikimirror-darkmode #sidebarCollapse:hover {\r\n\t\topacity: 0.8;\r\n\t}\r\n\t.wikimirror-darkmode .filehistory img,\r\n\t.wikimirror-darkmode .mw-ext-score img,\r\n\t.wikimirror-darkmode .mw-mmv-image *,\r\n\t.wikimirror-darkmode .mwe-math-element *,\r\n\t.wikimirror-darkmode #file img,\r\n\t.wikimirror-darkmode #gallerypreview img {\r\n\t\topacity: 1;\r\n\t}\r\n\t.wikimirror-darkmode img[alt*='-at-'],\r\n\t.wikimirror-darkmode img[alt*='- at -'],\r\n\t.wikimirror-darkmode img[alt*='Lightblue'],\r\n\t.wikimirror-darkmode img[alt*='Wikimedia-logo black'],\r\n\t.wikimirror-darkmode img[alt='詩詞賞析'],\r\n\t.wikimirror-darkmode img[src*='Blue-bg'],\r\n\t.wikimirror-darkmode img[src*='Bluebg'],\r\n\t.wikimirror-darkmode img[src*='Black_x'],\r\n\t.wikimirror-darkmode img[src*='China_char'],\r\n\t.wikimirror-darkmode img[src*='CWLA'],\r\n\t.wikimirror-darkmode img[src*='CWMoA'],\r\n\t.wikimirror-darkmode img[src*='CWS'],\r\n\t.wikimirror-darkmode img[src*='Inkscape_Logo'],\r\n\t.wikimirror-darkmode img[src*='Qiuwen'],\r\n\t.wikimirror-darkmode img[src*='_Shadow.'],\r\n\t.wikimirror-darkmode img[src*='Weiji.svg'],\r\n\t.wikimirror-darkmode img[src*='Wikimedia-logo_black'],\r\n\t.wikimirror-darkmode img[src*='Wikipedia%27s_W'],\r\n\t.wikimirror-darkmode img[src*='wikipedia-wordmark'],\r\n\t.wikimirror-darkmode img[src*='Wikipedia_wordmark'],\r\n\t.wikimirror-darkmode img[src*='Wikipedian_Journal_Title'],\r\n\t.wikimirror-darkmode .branding-box img,\r\n\t.wikimirror-darkmode .cdx-icon svg,\r\n\t.wikimirror-darkmode .mainpage_box h3 .header_icon img,\r\n\t.wikimirror-darkmode .minerva-footer img,\r\n\t.wikimirror-darkmode .mw-logo-container img,\r\n\t.wikimirror-darkmode .mw-ext-score img,\r\n\t.wikimirror-darkmode .wd-mp-headerimage,\r\n\t.wikimirror-darkmode .wikipedia-ko.main-box .main-shortcut-item img,\r\n\t.wikimirror-darkmode .wvui-icon svg,\r\n\t.wikimirror-darkmode #mf-wel img,\r\n\t.wikimirror-darkmode #p-banner img,\r\n\t.wikimirror-darkmode #portal img,\r\n\t.wikimirror-darkmode #topics-list img {\r\n\t\tfilter: invert(0);\r\n\t}\r\n\t.wikimirror-darkmode body.skin-timeless,\r\n\t.wikimirror-darkmode .drawer-container__mask,\r\n\t.wikimirror-darkmode .main-menu-mask,\r\n\t.wikimirror-darkmode .mw-mmv-image,\r\n\t.wikimirror-darkmode .mw-tmh-media-dialog .oo-ui-dialog-content > .oo-ui-window-body .oo-ui-layout,\r\n\t.wikimirror-darkmode .overlay.media-viewer,\r\n\t.wikimirror-darkmode .video-js,\r\n\t.wikimirror-darkmode .vjs-poster,\r\n\t.wikimirror-darkmode #menus-cover {\r\n\t\tbackground-color: #f7f7f7 !important;\r\n\t}\r\n\t.wikimirror-darkmode .diff-addedline .diffchange {\r\n\t\tbackground: #7fd7c4;\r\n\t}\r\n\t.wikimirror-darkmode .diff-deletedline .diffchange {\r\n\t\tbackground: #e88e89;\r\n\t}\r\n\t.wikimirror-darkmode .mw-kartographer-mapDialog-map {\r\n\t\tbackground-color: #000;\r\n\t}\r\n\t.wikimirror-darkmode .mwe-popups {\r\n\t\tborder: 10px solid #c8ccd1;\r\n\t\tborder-radius: 10px;\r\n\t\tbox-shadow: none;\r\n\t}\r\n\t.wikimirror-darkmode #mw-footer-container a,\r\n\t.wikimirror-darkmode .skin-modern .mw-editsection *,\r\n\t.wikimirror-darkmode .skin-modern .Wikiplus-Edit-SectionBtn {\r\n\t\tcolor: #36c;\r\n\t}\r\n\t.wikimirror-darkmode .locmap .pr {\r\n\t\tcolor: #fff;\r\n\t}\r\n\t.wikimirror-darkmode .skin-minerva .main-menu-mask {\r\n\t\tbackground: rgba(0, 0, 0, 0.2);\r\n\t}\r\n\t.wikimirror-darkmode .skin-timeless h1.firstHeading,\r\n\t.wikimirror-darkmode .skin-timeless .mw-footer-container,\r\n\t.wikimirror-darkmode .skin-timeless #mw-content-container,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-hack,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-nav-hack {\r\n\t\tbox-shadow: none;\r\n\t}\r\n\t.wikimirror-darkmode .skin-timeless h1.firstHeading,\r\n\t.wikimirror-darkmode .skin-timeless #mw-content-container {\r\n\t\tborder-bottom: solid 4px #c8ccd1;\r\n\t}\r\n\t.wikimirror-darkmode .skin-timeless .mw-footer-container {\r\n\t\tborder-top: 0;\r\n\t}\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-hack .color-left,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-hack .color-middle,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-hack .color-right,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-left,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-middle,\r\n\t.wikimirror-darkmode .skin-timeless #mw-header-nav-hack .color-right {\r\n\t\tbackground: #c8ccd1;\r\n\t}\r\n\t.wikimirror-darkmode #scrollDownButton,\r\n\t.wikimirror-darkmode #scrollDownButton-zhwiki,\r\n\t.wikimirror-darkmode #scrollUpButton,\r\n\t.wikimirror-darkmode #scrollUpButton-zhwiki {\r\n\t\ttransition: unset;\r\n\t}\r\n\t.wikimirror-darkmode input:not([type]),\r\n\t.wikimirror-darkmode textarea:not([type]),\r\n\t.wikimirror-darkmode .in-page-edit .CodeMirror {\r\n\t\tbackground: #eaecf0 !important;\r\n\t}\r\n\t.wikimirror-darkmode input:not([type]),\r\n\t.wikimirror-darkmode textarea:not([type]),\r\n\t.wikimirror-darkmode .mw-mmv-image .error-box,\r\n\t.wikimirror-darkmode .skin-minerva .search-box .search,\r\n\t.wikimirror-darkmode .skin-timeless .mw-footer-container,\r\n\t.wikimirror-darkmode .skin-timeless #searchInput,\r\n\t.wikimirror-darkmode .in-page-edit .CodeMirror {\r\n\t\tcolor: #000 !important;\r\n\t}\r\n\t/* cxserver */\r\n\t.wikimirror-darkmode .swagger-ui .topbar {\r\n\t\tbackground-color: #e3e3e3;\r\n\t}\r\n\t/* diff */\r\n\t.wikimirror-darkmode .site-footer#colophon {\r\n\t\tfilter: invert(1) hue-rotate(0.5turn);\r\n\t}\r\n\t/* gitlab */\r\n\t.wikimirror-darkmode body.ui-gray .navbar-gitlab {\r\n\t\tbackground-color: #fff;\r\n\t}\r\n\t/* phabricator */\r\n\t.wikimirror-darkmode .phui-comment-image,\r\n\t.wikimirror-darkmode .phui-curtain-object-ref-view-image-cell,\r\n\t.wikimirror-darkmode .phui-icon-view,\r\n\t.wikimirror-darkmode .phui-oi-image,\r\n\t.wikimirror-darkmode .phui-timeline-image,\r\n\t.wikimirror-darkmode .phabricator-main-menu-eye,\r\n\t.wikimirror-darkmode .phabricator-wordmark {\r\n\t\tfilter: invert(1) hue-rotate(0.5turn);\r\n\t}\r\n\t.wikimirror-darkmode .phui-theme-blue .phabricator-main-menu-background {\r\n\t\tbackground: #fff;\r\n\t}\r\n\t/* project portal */\r\n\t.wikimirror-darkmode body[id*='www'] [data-el-section='other projects'] .app-badges .sprite,\r\n\t.wikimirror-darkmode body[id*='www'] [data-el-section='other projects'] .other-project-icon {\r\n\t\tfilter: invert(1) hue-rotate(0.5turn);\r\n\t}\r\n\t.wikimirror-darkmode body[id*='www'] [data-jsl10n='portal.slogan'] {\r\n\t\tcolor: #000;\r\n\t}\r\n\t/* stream */\r\n\t.wikimirror-darkmode #eventstreams-ui-app .nav-bar {\r\n\t\tbackground-color: #fff;\r\n\t}\r\n\t.wikimirror-darkmode #eventstreams-ui-app .nav-bar a {\r\n\t\tcolor: #000 !important;\r\n\t}\r\n}\r\n\r\n@media only screen and (max-width: 550px) {\r\n\t.skin-monobook #echo-hack-badges,\r\n\t.skin-monobook #globalWrapper-toggle {\r\n\t\tdisplay: none;\r\n\t}\r\n}\r\n\r\n@media only screen and (max-width: 850px) {\r\n\t.skin-timeless .diff {\r\n\t\twidth: 100% !important;\r\n\t}\r\n\t.skin-timeless .mw-body table {\r\n\t\twidth: auto;\r\n\t\tword-break: break-all;\r\n\t}\r\n\t.skin-timeless .mw-body table table {\r\n\t\twidth: 100%;\r\n\t}\r\n}\r\n\r\n@media only screen and (min-width: 1340px) {\r\n\t.skin-timeless #site-tools {\r\n\t\tposition: -webkit-sticky;\r\n\t\tposition: sticky;\r\n\t\ttop: 4.475em;\r\n\t}\r\n}\r\n\r\n@media print {\r\n\t.noprint {\r\n\t\tdisplay: none !important;\r\n\t}\r\n}\r\n"],
5 | "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,CAAC,iBACA,WAAY,KACZ,OAAQ,MAAO,MAAM,QACrB,OAAQ,QACR,UAAW,IACX,QAAS,KACT,gBAAiB,OACjB,WAAY,OACZ,oBAAqB,KACb,YAAa,IACtB,CAEA,CAAC,aAAa,CAZb,iBAaA,WAAY,YACZ,OAAQ,MAAO,MAAM,KACrB,MAAO,OACR,CAEA,CAlBC,gBAkBiB,CAAE,CAAC,aACpB,aAAc,MAAO,OAAO,QAC5B,UAAW,KACX,YAAa,IACb,YAAa,IAhCd,OAiCS,EACR,UAAW,KAAK,KAAK,EAAE,MAlCxB,QAmCU,eACT,MAAO,oBACP,MAAO,iBACP,MAAO,YACP,WAAY,UACb,CAEA,CApBC,aAoBa,CAhCb,gBAgC+B,CAAE,CAAC,aAClC,aAAc,KAAM,OAAO,IAC5B,CAEA,CApCC,iBAoCiB,OACjB,WAAY,KACZ,OAAQ,EACR,MAAO,QACP,OAAQ,QACR,YAAa,QACb,UAAW,KApDZ,QAqDU,KAAM,EACf,MAAO,IACR,CAEA,CA/CC,iBA+CiB,MAAM,QACxB,CAhDC,iBAgDiB,MAAM,OACxB,CAjDC,iBAiDiB,MAAM,OACvB,WAAY,QACZ,MAAO,OACR,CAEA,CA1CC,aA0Ca,CAtDb,iBAsD+B,OAC/B,WAAY,YACZ,MAAO,OACR,CAEA,CA/CC,aA+Ca,CA3Db,iBA2D+B,MAAM,QACtC,CAhDC,aAgDa,CA5Db,iBA4D+B,MAAM,OACtC,CAjDC,aAiDa,CA7Db,iBA6D+B,MAAM,OACrC,WAAY,KACb,CAEA,CArDC,aAqDa,CAAC,cACd,OAAQ,MAAO,MAAM,OACtB,CAEA,CAJe,aAIA,CAAE,CAAC,aACjB,UAAW,KACX,aAAc,CACf,CAEA,CA9DC,aA8Da,GAAG,CAAC,aACjB,iBAAkB,OACnB,CAEA,CAlEC,aAkEa,GAAG,GAChB,SAAU,KACX,CAEA,CAtEC,aAsEa,EAAE,CAAC,sBAAsB,CAAC,QACxC,CAvEC,aAuEa,EAAE,CAAC,QAAQ,CADe,QAEvC,WAAY,UACb,CAEA,CA3EC,aA2Ea,CAbI,aAaU,IAC3B,SAAU,KACX,CAEA,CA/EC,aA+Ea,CAAC,qBACd,QAAS,CACV,CAEA,CAnFC,aAmFa,CAAC,6BAA6B,OAC3C,QAAS,IACV,CAEA,CAAC,cAAc,CAAC,mBAChB,CADC,cACc,CAAC,oBACf,OAAQ,cACT,CAEA,CALC,cAKc,CAAC,QAAQ,QACxB,CANC,cAMc,CAAC,SAAU,CAAE,QAC3B,MAAO,cACR,CAEA,CAVC,cAUc,CAAC,mBACf,QAAS,cACV,CAEA,CAdC,cAcc,CAAC,iBACf,QAAS,IACV,CAEA,CAlBC,cAkBc,CAAC,SACf,WAAY,QACZ,OAAQ,MAAM,QACd,aAAc,IAAI,IAAI,KACtB,WAAY,EAAE,IAAI,IAAI,IAAI,UAC1B,QAAS,QACT,UAAW,MArIZ,OAsIS,IAAI,EAAE,EAtIf,QAuIU,IAAI,GACd,CAEA,CA7BC,cA6Bc,CAXC,SAWS,IA1IzB,OA2IS,EAAE,EAAE,KACb,CAEA,CAjCC,cAiCc,CAfC,SAeS,GAAG,cA9I5B,OA+IS,CACT,CAEA,CArCC,cAqCc,CAnBC,SAmBS,GACxB,YAAa,CACd,CAEA,CAAC,iBAAiB,CAAC,CAAC,SACpB,GAAG,CAAC,UACH,oBAAqB,KACb,YAAa,IACtB,CAEA,CANC,iBAMiB,CAAC,CANC,QAMQ,CAAC,KAC7B,CAPC,iBAOiB,CAAC,CAPC,QAOQ,CAAC,KAC5B,oBAAqB,MACb,YAAa,KACtB,CAEA,CAAC,yBAA0B,CAAE,CAAC,aAC7B,wBAAyB,KAAK,KACtB,gBAAiB,KAAK,IAC/B,CAEA,CAAC,kCACA,iBAAkB,0aACnB,CAEA,CAAC,2CACA,iBAAkB,itBACnB,CAEA,CAAC,SACD,CAAC,UACA,QAAS,cACV,CAEA,CAAC,iBACA,OAAQ,eACR,MAAO,cACR,CAEA,KACC,SAAU,CACX,CAEA,IACA,CAAC,QACD,CA3GkB,aA4GlB,CAAC,gCAAgC,CAAC,gBAClC,CADC,gCACgC,CADC,gBACgB,EAClD,CAFC,gCAEgC,CAAC,wBAAwB,CAAC,oBAC1D,WAAY,mBACZ,YAAa,mBACb,WAAY,oBACZ,UAAW,oBACZ,CAEA,OAAO,KAAK,OACX,IAAI,CAAC,oBACL,CADK,oBACgB,OACpB,OAAQ,OAAO,KAAM,WAAW,OACjC,CACA,CAJK,oBAKL,CALK,oBAKgB,MAAM,KAAK,CAAC,WACjC,CANK,oBAMgB,GAAG,KAAK,CADI,WAEjC,CAPK,oBAOgB,MACrB,CARK,oBAQgB,GAAG,KAAK,CAHI,WAIjC,CATK,oBASgB,MACrB,CAVK,oBAUgB,CAAC,cACtB,CAXK,oBAWgB,CAAC,UACtB,CAZK,oBAYgB,CAAC,eACtB,CAbK,oBAagB,CAAC,QAAQ,CAAC,WAC/B,CAdK,oBAcgB,CADC,SACS,CAAC,WAChC,CAfK,oBAegB,CAAC,UAAU,KAAK,CAAC,iBACtC,CAhBK,oBAgBgB,CAAC,WAAW,CAAC,gBAClC,CAjBK,oBAiBgB,CAAC,aACtB,CAlBK,oBAkBgB,CAAC,iBACtB,CAnBK,oBAmBgB,CAAC,oBACtB,CApBK,oBAoBgB,CAAC,eACtB,CArBK,oBAqBgB,CAAC,uBACtB,CAtBK,oBAsBgB,CAAC,oBACrB,OAAQ,OAAO,GAAG,WAAW,OAC9B,CACA,CAzBK,oBAyBgB,CAAC,aAAa,GAAG,CAAC,QACtC,OAAQ,KAAK,KAAK,OAAO,GAAG,WAAW,iBACxC,CACA,CA5BK,oBA4BgB,IACrB,CA7BK,oBA6BgB,CAAC,aACtB,CA9BK,oBA8BgB,CAAC,aACtB,CA/BK,oBA+BgB,CAAC,eACtB,CAhCK,oBAgCgB,CAVC,oBAWrB,QAAS,GACT,WAAY,QAAQ,IAAK,WAC1B,CACA,CApCK,oBAoCgB,GAAG,OACvB,QAAS,CACV,CACA,CAvCK,oBAuCgB,CAAC,aAAa,GAAG,OACtC,CAxCK,oBAwCgB,CAAC,eAAe,GAAG,OACxC,CAzCK,oBAyCgB,CAAC,kBAAkB,GAAG,OAC3C,CA1CK,oBA0CgB,CAAC,YAAY,OAClC,CA3CK,oBA2CgB,CAbC,YAaY,CAAC,cAAc,GAAG,OACpD,CA5CK,oBA4CgB,CAAC,SAAS,GAAG,OAClC,CA7CK,oBA6CgB,CAAC,eAAe,OACpC,QAAS,EACV,CACA,CAhDK,oBAgDgB,CAAC,YAAY,IAClC,CAjDK,oBAiDgB,CAAC,aAAa,IACnC,CAlDK,oBAkDgB,CAzBC,aAyBa,EACnC,CAnDK,oBAmDgB,CAAC,iBAAiB,EACvC,CApDK,oBAoDgB,CAAC,KAAK,IAC3B,CArDK,oBAqDgB,CAAC,eAAe,IACpC,QAAS,CACV,CACA,CAxDK,oBAwDgB,GAAG,CAAC,WACzB,CAzDK,oBAyDgB,GAAG,CAAC,eACzB,CA1DK,oBA0DgB,GAAG,CAAC,gBACzB,CA3DK,oBA2DgB,GAAG,CAAC,6BACzB,CA5DK,oBA4DgB,GAAG,CAAC,UACzB,CA7DK,oBA6DgB,GAAG,CAAC,cACzB,CA9DK,oBA8DgB,GAAG,CAAC,aACzB,CA/DK,oBA+DgB,GAAG,CAAC,cACzB,CAhEK,oBAgEgB,GAAG,CAAC,iBACzB,CAjEK,oBAiEgB,GAAG,CAAC,WACzB,CAlEK,oBAkEgB,GAAG,CAAC,YACzB,CAnEK,oBAmEgB,GAAG,CAAC,UACzB,CApEK,oBAoEgB,GAAG,CAAC,oBACzB,CArEK,oBAqEgB,GAAG,CAAC,aACzB,CAtEK,oBAsEgB,GAAG,CAAC,iBACzB,CAvEK,oBAuEgB,GAAG,CAAC,kBACzB,CAxEK,oBAwEgB,GAAG,CAAC,2BACzB,CAzEK,oBAyEgB,GAAG,CAAC,wBACzB,CA1EK,oBA0EgB,GAAG,CAAC,yBACzB,CA3EK,oBA2EgB,GAAG,CAAC,yBACzB,CA5EK,oBA4EgB,GAAG,CAAC,+BACzB,CA7EK,oBA6EgB,CAtCC,aAsCa,IACnC,CA9EK,oBA8EgB,CAAC,SAAS,IAC/B,CA/EK,oBA+EgB,CAAC,aAAa,GAAG,CAAC,YAAY,IACnD,CAhFK,oBAgFgB,CAxCC,eAwCe,IACrC,CAjFK,oBAiFgB,CAxCC,kBAwCkB,IACxC,CAlFK,oBAkFgB,CAjCC,aAiCa,IACnC,CAnFK,oBAmFgB,CAAC,kBACtB,CApFK,oBAoFgB,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB,IAChE,CArFK,oBAqFgB,CAAC,UAAU,IAChC,CAtFK,oBAsFgB,CAAC,OAAO,IAC7B,CAvFK,oBAuFgB,CA3CC,SA2CS,IAC/B,CAxFK,oBAwFgB,CAAC,OAAO,IAC7B,CAzFK,oBAyFgB,CAAC,YAAY,IACjC,OAAQ,OAAO,EAChB,CACA,CA5FK,oBA4FgB,IAAI,CAzLzB,cA0LA,CA7FK,oBA6FgB,CAAC,uBACtB,CA9FK,oBA8FgB,CAAC,eACtB,CA/FK,oBA+FgB,CAtEC,aAuEtB,CAhGK,oBAgGgB,CAAC,oBAAoB,CAAC,oBAAqB,CAAE,CAAC,kBAAkB,CAAC,aACtF,CAjGK,oBAiGgB,CAAC,OAAO,CAAC,aAC9B,CAlGK,oBAkGgB,CAAC,SACtB,CAnGK,oBAmGgB,CAAC,WACtB,CApGK,oBAoGgB,CAAC,YACrB,iBAAkB,iBACnB,CACA,CAvGK,oBAuGgB,CAAC,eAAe,CAAC,WACrC,WAAY,OACb,CACA,CA1GK,oBA0GgB,CAAC,iBAAiB,CAHD,WAIrC,WAAY,OACb,CACA,CA7GK,oBA6GgB,CAAC,8BACrB,iBAAkB,IACnB,CACA,CAhHK,oBAgHgB,CAAC,WACrB,OAAQ,KAAK,MAAM,QA3TrB,cA4TiB,KACf,WAAY,IACb,CACA,CArHK,oBAqHgB,CAAC,oBAAoB,EAC1C,CAtHK,oBAsHgB,CAAC,YAAY,CAAC,eAAe,EAClD,CAvHK,oBAuHgB,CADC,YACY,CAAC,yBAClC,MAAO,IACR,CACA,CA1HK,oBA0HgB,CAAC,OAAO,CAAC,GAC7B,MAAO,IACR,CACA,CA7HK,oBA6HgB,CAjTrB,aAiTmC,CA/Bb,eAgCrB,WAAY,KACb,CACA,CAhIK,oBAgIgB,CA7NrB,cA6NoC,EAAE,CAAC,aACvC,CAjIK,oBAiIgB,CA9NrB,cA8NoC,CAZd,oBAatB,CAlIK,oBAkIgB,CA/NrB,cA+NoC,CAAC,qBACrC,CAnIK,oBAmIgB,CAhOrB,cAgOoC,CAAC,eACrC,CApIK,oBAoIgB,CAjOrB,cAiOoC,CAAC,mBACpC,WAAY,IACb,CACA,CAvIK,oBAuIgB,CApOrB,cAoOoC,EAAE,CAPC,aAQvC,CAxIK,oBAwIgB,CArOrB,cAqOoC,CANC,qBAOpC,cAAe,MAAM,IAAI,OAC1B,CACA,CA3IK,oBA2IgB,CAxOrB,cAwOoC,CAtBd,oBAuBrB,WAAY,CACb,CACA,CA9IK,oBA8IgB,CA3OrB,cA2OoC,CAXC,eAWe,CAAC,WACrD,CA/IK,oBA+IgB,CA5OrB,cA4OoC,CAZC,eAYe,CAAC,aACrD,CAhJK,oBAgJgB,CA7OrB,cA6OoC,CAbC,eAae,CAAC,YACrD,CAjJK,oBAiJgB,CA9OrB,cA8OoC,CAbC,mBAamB,CAHH,WAIrD,CAlJK,oBAkJgB,CA/OrB,cA+OoC,CAdC,mBAcmB,CAHH,aAIrD,CAnJK,oBAmJgB,CAhPrB,cAgPoC,CAfC,mBAemB,CAHH,YAIpD,WAAY,OACb,CACA,CAtJK,oBAsJgB,CAAC,iBACtB,CAvJK,oBAuJgB,CAAC,wBACtB,CAxJK,oBAwJgB,CAAC,eACtB,CAzJK,oBAyJgB,CAAC,sBACrB,WAAY,KACb,CACA,CA5JK,oBA4JgB,KAAK,KAAK,CAAC,OAChC,CA7JK,oBA6JgB,QAAQ,KAAK,CAAC,OACnC,CA9JK,oBA8JgB,CAAC,aAAa,CAAC,WACnC,WAAY,iBACb,CACA,CAjKK,oBAiKgB,KAAK,KAAK,CAAC,OAChC,CAlKK,oBAkKgB,QAAQ,KAAK,CAAC,OACnC,CAnKK,oBAmKgB,CA1IC,aA0Ia,CAAC,UACpC,CApKK,oBAoKgB,CAxVrB,aAwVmC,CAAC,WAAW,CAAC,OAChD,CArKK,oBAqKgB,CAlQrB,cAkQoC,CAhDd,oBAiDtB,CAtKK,oBAsKgB,CAnQrB,cAmQoC,CAAC,YACrC,CAvKK,oBAuKgB,CATC,aASa,CATC,WAUnC,MAAO,cACR,CAEA,CA3KK,oBA2KgB,CAAC,WAAW,CAAC,OACjC,iBAAkB,OACnB,CAEA,CA/KK,oBA+KgB,CAAC,WAAW,CAAC,SACjC,OAAQ,OAAO,GAAG,WAAW,OAC9B,CAEA,CAnLK,oBAmLgB,IAAI,CAAC,QAAQ,CAAC,cAClC,iBAAkB,IACnB,CAEA,CAvLK,oBAuLgB,CAAC,mBACtB,CAxLK,oBAwLgB,CAAC,wCACtB,CAzLK,oBAyLgB,CAAC,eACtB,CA1LK,oBA0LgB,CAAC,cACtB,CA3LK,oBA2LgB,CAAC,oBACtB,CA5LK,oBA4LgB,CAAC,0BACtB,CA7LK,oBA6LgB,CAAC,qBACrB,OAAQ,OAAO,GAAG,WAAW,OAC9B,CACA,CAhMK,oBAgMgB,CAAC,gBAAgB,CAAC,iCACtC,WAAY,IACb,CAEA,CApMK,oBAoMgB,IAAI,CAAC,SAAW,CAAC,kCAAkC,CAAC,WAAW,CAAC,OACrF,CArMK,oBAqMgB,IAAI,CAAC,SAAW,CAAC,kCAAkC,CAAC,mBACxE,OAAQ,OAAO,GAAG,WAAW,OAC9B,CACA,CAxMK,oBAwMgB,IAAI,CAAC,SAAW,CAAC,6BACrC,MAAO,IACR,CAEA,CA5MK,oBA4MgB,CAAC,oBAAoB,CAAC,QAC1C,iBAAkB,IACnB,CACA,CA/MK,oBA+MgB,CAHC,oBAGoB,CAHC,QAGQ,EAClD,MAAO,cACR,CACD,CAEA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,OAClC,CAAC,cAAc,CAAC,iBAChB,CADC,cACc,CAAC,qBACf,QAAS,IACV,CACD,CAEA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,OAClC,CAzTA,cAyTe,CAAC,KACf,MAAO,cACR,CACA,CA5TA,cA4Te,CAAC,QAAQ,MACvB,MAAO,KACP,WAAY,SACb,CACA,CAhUA,cAgUe,CAJC,QAIQ,MAAM,MAC7B,MAAO,IACR,CACD,CAEA,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,QAClC,CAtUA,cAsUe,CAAC,WACf,SAAU,eACV,SAAU,OACV,IAAK,OACN,CACD,CAEA,OAAO,MACN,CAAC,QACA,QAAS,cACV,CACD",
6 | "names": []
7 | }
8 |
--------------------------------------------------------------------------------
/wikimirror.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnYiEE/nginx-wikimirror/ac4e87defdecbdc20cfc9796c7edc98d10b59457/wikimirror.png
--------------------------------------------------------------------------------