国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial nginx – Beispiel für eine Optimierungskonfiguration

nginx – Beispiel für eine Optimierungskonfiguration

Aug 08, 2016 am 09:29 AM
fastcgi nginx

http://www.lvtao.net/tool/nginx-config-10w.html
Optimierung in der Nginx-Direktive (Konfigurationsdatei) worker_processes 8;

Es wird empfohlen, die Anzahl der Nginx-Prozesse entsprechend der Anzahl der CPUs anzugeben, normalerweise ein Vielfaches davon.

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

Weisen Sie jedem Prozess eine CPU zu. Im obigen Beispiel sind 8 Prozesse 8 CPUs zugeordnet. Natürlich k?nnen Sie mehrere schreiben oder einen Prozess mehreren CPUs zuweisen.

worker_rlimit_nofile 102400;

Dieser Befehl bezieht sich auf die maximale Anzahl der von einem Nginx-Prozess ge?ffneten Dateideskriptoren. Der theoretische Wert sollte die maximale Anzahl ge?ffneter Dateien (ulimit -n) geteilt durch die Anzahl der Nginx-Prozesse sein Die Nginx-Zuweisungsanforderung ist nicht so einheitlich, daher ist es besser, mit dem Wert von ulimit -n konsistent zu sein.

use epoll;

Die Verwendung des E/A-Modells von epoll versteht sich von selbst.

worker_connections 102400;

Die maximal zul?ssige Anzahl von Verbindungen pro Prozess betr?gt theoretisch worker_processes*worker_connections.

keepalive_timeout 60;

Keepalive-Timeout.

client_header_buffer_size 4k;

Die Puffergr??e des Client-Anfrage-Headers kann entsprechend der Paging-Gr??e Ihres Systems festgelegt werden. Im Allgemeinen überschreitet die Header-Gr??e einer Anfrage 1 KB nicht, da die allgemeine System-Paging-Gr??e jedoch gr??er ist als 1 KB, daher wird dies auf die Paging-Gr??e eingestellt. Die Paging-Gr??e kann mit dem Befehl getconf PAGESIZE ermittelt werden.

open_file_cache max=102400 inactive=20s;

Dies gibt den Cache für ge?ffnete Dateien an. Es wird empfohlen, die Anzahl der ge?ffneten Dateien konsistent zu halten Die Datei wurde nicht angefordert, bevor der Cache gel?scht wurde.

open_file_cache_valid 30s;

Dies bezieht sich darauf, wie oft zwischengespeicherte gültige Informationen überprüft werden sollen.

open_file_cache_min_uses 1;

Die Mindestanzahl, wie oft die Datei w?hrend des inaktiven Parameters in der open_file_cache-Anweisung verwendet wird. Wenn diese Zahl überschritten wird, wird der Dateideskriptor immer im Cache ge?ffnet Innerhalb der inaktiven Zeit befindet sich eine Datei. Sobald sie nicht verwendet wird, wird sie entfernt.

Optimierung der Kernel-Parameter net.ipv4.tcp_max_tw_buckets = 6000

Die Anzahl der Wartezeiten, der Standardwert ist 180000.

net.ipv4.ip_local_port_range = 1024 65000

Der Bereich der Ports, die das System ?ffnen darf.

net.ipv4.tcp_tw_recycle = 1

Aktivieren Sie Timewait, schnelles Recycling.

net.ipv4.tcp_tw_reuse = 1

Wiederverwendung aktivieren. Erm?glicht die Wiederverwendung von TIME-WAIT-Sockets für neue TCP-Verbindungen.

net.ipv4.tcp_syncookies = 1

SYN-Cookies aktivieren Wenn die SYN-Warteschlange überl?uft, aktivieren Sie Cookies, um damit umzugehen.

net.core.somaxconn = 262144

Der Rückstand der Listen-Funktion in der Webanwendung begrenzt den net.core.somaxconn unserer Kernel-Parameter standardm??ig auf 128, und der von nginx definierte NGX_LISTEN_BACKLOG ist standardm??ig auf 511 festgelegt, daher ist dies erforderlich um diesen Wert anzupassen.

net.core.netdev_max_backlog = 262144

Die maximale Anzahl von Paketen, die in die Warteschlange gestellt werden dürfen, wenn jede Netzwerkschnittstelle Pakete schneller empf?ngt, als der Kernel sie verarbeiten kann.

net.ipv4.tcp_max_orphans = 262144

Die maximale Anzahl von TCP-Sockets im System, die keinem Benutzerdatei-Handle zugeordnet sind. Wenn diese Zahl überschritten wird, wird die verwaiste Verbindung sofort zurückgesetzt und eine Warnmeldung ausgegeben. Diese Grenze dient nur der Verhinderung einfacher DoS-Angriffe. Sie k?nnen sich nicht zu sehr darauf verlassen oder diesen Wert künstlich verringern. Sie sollten diesen Wert erh?hen (wenn Sie den Speicher erh?hen).

net.ipv4.tcp_max_syn_backlog = 262144

Die maximale Anzahl der aufgezeichneten Verbindungsanfragen, die noch keine Best?tigung vom Client erhalten haben. Für Systeme mit 128 MB Speicher ist der Standardwert 1024 und für Systeme mit kleinem Speicher 128.

net.ipv4.tcp_timestamps = 0

Mit einem Zeitstempel kann das Umbrechen von Seriennummern vermieden werden. Bei einer 1-Gbit/s-Verbindung werden Sie auf jeden Fall auf Sequenznummern sto?en, die bereits zuvor verwendet wurden. Der Zeitstempel erm?glicht es dem Kernel, solche ?abnormalen“ Pakete zu akzeptieren. Es muss hier ausgeschaltet werden.

net.ipv4.tcp_synack_retries = 1

Um eine Verbindung zum Peer zu ?ffnen, muss der Kernel ein SYN mit einer ACK als Antwort auf das vorherige SYN senden. Dies ist der zweite Handschlag beim sogenannten Drei-Wege-Handschlag. Diese Einstellung bestimmt die Anzahl der SYN+ACK-Pakete, die der Kernel sendet, bevor die Verbindung aufgegeben wird.

net.ipv4.tcp_syn_retries = 1

Die Anzahl der gesendeten SYN-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt.

net.ipv4.tcp_fin_timeout = 1

Wenn der Socket vom lokalen Ende geschlossen werden soll, bestimmt dieser Parameter, wie lange er im FIN-WAIT-2-Zustand bleibt. Der Peer kann Fehler machen und die Verbindung niemals schlie?en oder sogar unerwartet abstürzen. Der Standardwert betr?gt 60 Sekunden. Der übliche Wert für den 2.2-Kernel betr?gt 180 Sekunden. Sie k?nnen diese Einstellung drücken, aber denken Sie daran, dass aufgrund einer gro?en Anzahl toter Sockets die Gefahr eines Speicherüberlaufs besteht -2 ist weniger gef?hrlich als FIN-WAIT-1, da es nur bis zu 1,5 KB Speicher beanspruchen kann, aber ihre überlebenszeit ist l?nger.

net.ipv4.tcp_keepalive_time = 30

Wenn Keepalive aktiviert ist, die H?ufigkeit, mit der TCP Keepalive-Nachrichten sendet. Der Standardwert betr?gt 2 Stunden.

Eine vollst?ndige Kernel-Optimierungskonfigurationnet.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000Eine einfache Nginx-Optimierungskonfigurationsdateiuser www www; worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000; error_log /www/log/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 204800; events { use epoll; worker_connections 204800; } http { include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 2k; large_client_header_buffers 4 4k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; fastcgi_busy_buffers_size 16k; fastcgi_temp_file_write_size 16k; fastcgi_cache TEST; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; open_file_cache max=204800 inactive=20s; open_file_cache_min_uses 1; open_file_cache_valid 30s; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 8080; server_name ad.test.com; index index.php index.htm; root /www/html/; location /status { stub_status on; } location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /www/log/access.log access; } }關(guān)于FastCGI的幾個(gè)指令fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

這個(gè)指令為FastCGI緩存指定一個(gè)路徑,目錄結(jié)構(gòu)等級(jí),關(guān)鍵字區(qū)域存儲(chǔ)時(shí)間和非活動(dòng)刪除時(shí)間。

fastcgi_connect_timeout 300;

指定連接到后端FastCGI的超時(shí)時(shí)間。

fastcgi_send_timeout 300;

向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間,這個(gè)值是指已經(jīng)完成兩次握手后向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間。

fastcgi_read_timeout 300;

接收FastCGI應(yīng)答的超時(shí)時(shí)間,這個(gè)值是指已經(jīng)完成兩次握手后接收FastCGI應(yīng)答的超時(shí)時(shí)間。

fastcgi_buffer_size 16k;

指定讀取FastCGI應(yīng)答第一部分需要用多大的緩沖區(qū),這里可以設(shè)置為fastcgi_buffers指令指定的緩沖區(qū)大小,上面的指令指定它將使用1 個(gè)16k的緩沖區(qū)去讀取應(yīng)答的第一部分,即應(yīng)答頭,其實(shí)這個(gè)應(yīng)答頭一般情況下都很小(不會(huì)超過1k),但是你如果在fastcgi_buffers指令中 指定了緩沖區(qū)的大小,那么它也會(huì)分配一個(gè)fastcgi_buffers指定的緩沖區(qū)大小去緩存。

fastcgi_buffers 16 16k;

指定本地需要用多少和多大的緩沖區(qū)來緩沖FastCGI的應(yīng)答,如上所示,如果一個(gè)php腳本所產(chǎn)生的頁面大小為256k,則會(huì)為其分配16個(gè)16k的緩 沖區(qū)來緩存,如果大于256k,增大于256k的部分會(huì)緩存到fastcgi_temp指定的路徑中,當(dāng)然這對(duì)服務(wù)器負(fù)載來說是不明智的方案,因?yàn)閮?nèi)存中 處理數(shù)據(jù)速度要快于硬盤,通常這個(gè)值的設(shè)置應(yīng)該選擇一個(gè)你的站點(diǎn)中的php腳本所產(chǎn)生的頁面大小的中間值,比如你的站點(diǎn)大部分腳本所產(chǎn)生的頁面大小為 256k就可以把這個(gè)值設(shè)置為16 16k,或者4 64k 或者64 4k,但很顯然,后兩種并不是好的設(shè)置方法,因?yàn)槿绻a(chǎn)生的頁面只有32k,如果用4 64k它會(huì)分配1個(gè)64k的緩沖區(qū)去緩存,而如果使用64 4k它會(huì)分配8個(gè)4k的緩沖區(qū)去緩存,而如果使用16 16k則它會(huì)分配2個(gè)16k去緩存頁面,這樣看起來似乎更加合理。

fastcgi_busy_buffers_size 32k;

這個(gè)指令我也不知道是做什么用,只知道默認(rèn)值是fastcgi_buffers的兩倍。

fastcgi_temp_file_write_size 32k;

在寫入fastcgi_temp_path時(shí)將用多大的數(shù)據(jù)塊,默認(rèn)值是fastcgi_buffers的兩倍。

fastcgi_cache TEST

開啟FastCGI緩存并且為其制定一個(gè)名稱。個(gè)人感覺開啟緩存非常有用,可以有效降低CPU負(fù)載,并且防止502錯(cuò)誤。但是這個(gè)緩存會(huì)引起很多問題,因?yàn)樗彺娴氖莿?dòng)態(tài)頁面。具體使用還需根據(jù)自己的需求。

fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m;

為指定的應(yīng)答代碼指定緩存時(shí)間,如上例中將200,302應(yīng)答緩存一小時(shí),301應(yīng)答緩存1天,其他為1分鐘。

fastcgi_cache_min_uses 1;

緩存在fastcgi_cache_path指令inactive參數(shù)值時(shí)間內(nèi)的最少使用次數(shù),如上例,如果在5分鐘內(nèi)某文件1次也沒有被使用,那么這個(gè)文件將被移除。

fastcgi_cache_use_stale error timeout invalid_header http_500;

不知道這個(gè)參數(shù)的作用,猜想應(yīng)該是讓nginx知道哪些類型的緩存是沒用的。 以上為nginx中FastCGI相關(guān)參數(shù),另外,F(xiàn)astCGI自身也有一些配置需要進(jìn)行優(yōu)化,如果你使用php-fpm來管理FastCGI,可以修改配置文件中的以下值:

60

同時(shí)處理的并發(fā)請(qǐng)求數(shù),即它將開啟最多60個(gè)子線程來處理并發(fā)連接。

102400

最多打開文件數(shù)。

204800

每個(gè)進(jìn)程在重置之前能夠執(zhí)行的最多請(qǐng)求數(shù)。

以上就介紹了nginx--優(yōu)化配置示例,包括了方面的內(nèi)容,希望對(duì)PHP教程有興趣的朋友有所幫助。

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Nginx vs. Apache: Eine vergleichende Analyse von Webservern Nginx vs. Apache: Eine vergleichende Analyse von Webservern Apr 21, 2025 am 12:08 AM

Nginx eignet sich besser zum Umgang mit hohen gleichzeitigen Verbindungen, w?hrend Apache besser für Szenarien geeignet ist, in denen komplexe Konfigurationen und Modulverl?ngerungen erforderlich sind. 1.Nginx ist bekannt für seine hohe Leistung und den niedrigen Ressourcenverbrauch und ist für eine hohe Parallelit?t geeignet. 2.APACHE ist bekannt für seine Stabilit?t und die reichhaltigen Modulverl?ngerungen, die für komplexe Konfigurationsanforderungen geeignet sind.

Nginx und Apache: Verst?ndnis der wichtigsten Unterschiede Nginx und Apache: Verst?ndnis der wichtigsten Unterschiede Apr 26, 2025 am 12:01 AM

Nginx und Apache haben jeweils ihre eigenen Vor- und Nachteile, und die Auswahl sollte auf bestimmten Bedürfnissen beruhen. 1.Nginx ist aufgrund seiner asynchronen nicht blockierenden Architektur für hohe Parallelit?tsszenarien geeignet. 2. Apache eignet sich für Szenarien mit niedriger Konsequenz, die aufgrund seines modularen Designs komplexe Konfigurationen erfordern.

Wie kann ich PHP -Code nach dem Schreiben von PHP -Code ausführen? Mehrere gemeinsame M?glichkeiten, um PHP -Code auszuführen Wie kann ich PHP -Code nach dem Schreiben von PHP -Code ausführen? Mehrere gemeinsame M?glichkeiten, um PHP -Code auszuführen May 23, 2025 pm 08:33 PM

Der PHP -Code kann auf viele Arten ausgeführt werden: 1. Verwenden Sie die Befehlszeile, um den "PHP -Dateinamen" direkt einzugeben, um das Skript auszuführen. 2. Einlegen Sie die Datei in das Dokument -Root -Verzeichnis und greifen Sie über den Browser über den Webserver darauf zu. 3. Führen Sie es in der IDE aus und verwenden Sie das integrierte Debugging-Tool. V.

Nach der Installation von NGINX, dem Konfigurationsdateipfad und der ersten Einstellungen Nach der Installation von NGINX, dem Konfigurationsdateipfad und der ersten Einstellungen May 16, 2025 pm 10:54 PM

Das Verst?ndnis des Konfigurationsdateipfads von NGINX und der ersten Einstellungen ist sehr wichtig, da er der erste Schritt zur Optimierung und Verwaltung eines Webservers ist. 1) Der Konfigurationsdateipfad ist normalerweise /etc/nginx/nginx.conf. Die Syntax kann mit dem Befehl nginx-t gefunden und getestet werden. 2) Die ersten Einstellungen umfassen globale Einstellungen (z. B. Benutzer, Worker_Processes) und HTTP -Einstellungen (z. B. inklusive log_format). Diese Einstellungen erm?glichen die Anpassung und Erweiterung gem?? den Anforderungen. Eine falsche Konfiguration kann zu Leistungsproblemen und Sicherheitslücken führen.

Wie begrenzte ich Benutzerressourcen in Linux? Wie konfiguriere ich Ulimit? Wie begrenzte ich Benutzerressourcen in Linux? Wie konfiguriere ich Ulimit? May 29, 2025 pm 11:09 PM

Linux -System beschr?nkt die Benutzerressourcen durch den Befehl ulimit, um eine überm??ige Verwendung von Ressourcen zu verhindern. 1.ulimit ist ein integrierter Shell-Befehl, mit dem die Anzahl der Dateideskriptoren (-n), die Speichergr??e (-V), die Threadzahl (-U) usw. begrenzt werden kann, die in Soft Limit (aktueller effektiver Wert) und hartem Grenze (maximale Obergrenze) unterteilt sind. 2. Verwenden Sie den Befehl ulimit direkt zur vorübergehenden ?nderung, wie z. B. Ulimit-N2048, ist jedoch nur für die aktuelle Sitzung gültig. 3. Für den dauerhaften Effekt müssen Sie /etc/security/limits.conf- und PAM -Konfigurationsdateien ?ndern und SessionRequiredpam_Limits.so hinzufügen. 4. Der SystemD -Dienst muss Lim in der Einheitsdatei einstellen

Was sind die Debian Nginx -Konfigurationsf?higkeiten? Was sind die Debian Nginx -Konfigurationsf?higkeiten? May 29, 2025 pm 11:06 PM

Bei der Konfiguration von NGINX im Debian -System finden Sie einige praktische Tipps: Die grundlegende Struktur der globalen Einstellungen der Konfigurationsdatei: Definieren Sie Verhaltensparameter, die den gesamten NGINX -Dienst beeinflussen, z. B. die Anzahl der Worker -Threads und die Berechtigungen für laufende Benutzer. Ereignisbearbeitungsteil: Die Entscheidung, wie NGINX mit Netzwerkverbindungen umgeht, ist eine wichtige Konfiguration zur Verbesserung der Leistung. HTTP -Service -Teil: Enth?lt eine gro?e Anzahl von Einstellungen im Zusammenhang mit dem HTTP -Dienst und kann mehrere Server und Standortbl?cke einbetten. Kernkonfigurationsoptionen Worker_Connections: Definieren Sie die maximale Anzahl von Verbindungen, die jeder Worker-Thread verarbeiten kann, normalerweise auf 1024. Multi_accept: Aktivieren Sie den Empfangsmodus mit mehreren Konnection-Empfang und verbessern Sie die F?higkeit der gleichzeitigen Verarbeitung. S

Nginx 'Zweck: Servieren von Webinhalten und mehr Nginx 'Zweck: Servieren von Webinhalten und mehr May 08, 2025 am 12:07 AM

NginxServeswebcontentandactsaSareverseverproxy, Lastballer und More.1) iTeffictyServesTaticContent -LikeHtmlandImages.2) itFunctionsSareverseStaticContent -likeHtmlandImages.2) iTFunctionsAsareverseproxyandAnloadBalancer, DistributingTrafficacrossSservers.3)

NGINX -Fehlerbehebung: Diagnose und L?sung von gemeinsamen Fehlern NGINX -Fehlerbehebung: Diagnose und L?sung von gemeinsamen Fehlern May 05, 2025 am 12:09 AM

Diagnose und L?sungen für h?ufige Fehler von Nginx geh?ren: 1. Protokolldateien anzeigen, 2. Konfigurationsdateien anpassen, 3. Optimieren Sie die Leistung. Durch Analyse von Protokollen, Anpassung der Zeitüberschreitungseinstellungen und Optimierung des Cache und des Lastausgleichs k?nnen Fehler wie 404, 502, 504 effektiv gel?st werden, um die Stabilit?t und Leistung der Website zu verbessern.

See all articles