wordpress nginx conf dosyası

WordPress için Nginx/PHP/Ubuntu üzerinde derlediğim kodlar server parametlerini kurduktan sonra php7 yahut php5 fark etmeden sitenizi korumaya yarar.


location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
expires max; log_not_found off; access_log off; tcp_nodelay off;
open_file_cache max=1000 inactive=120s;
open_file_cache_valid 45s;
open_file_cache_min_uses 2;
open_file_cache_errors off; }

location / { try_files $uri $uri/ /index.php?$args; }
location ~ /\. { deny all; }
location ~ xmlrpc.php { deny all; }
location ~* ^/wp-content/.*.(pl|py|jsp|asp|htm|html|shtml|sh|cgi)$ { deny all; }
location ~* ^/wp-includes/.*\.(php|pl|py|jsp|asp|htm|html|shtml|sh|cgi|phps)$ {internal;}
location ~* ^/wp-content/.*.(txt|md|exe)$ { deny all; }
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { allow all; log_not_found off; access_log off; }
location = /wp-config.php { deny all; }

if ($request_method ~* "^(TRACE|DELETE|TRACK)") { return 403; }
if ($args ~* "\.\./") { set $susquery 1; }
if ($args ~* "\.(bash|git|hg|log|svn|swp|cvs)") { set $susquery 1; }
if ($args ~* "etc/passwd") { set $susquery 1; }
if ($args ~* "boot.ini") { set $susquery 1; }
if ($args ~* "ftp:") { set $susquery 1; }
if ($args ~* "http:") { set $susquery 1; }
if ($args ~* "https:") { set $susquery 1; }
if ($args ~* "(<|%3C).*script.*(>|%3E)") { set $susquery 1; }
if ($args ~* "mosConfig_[a-zA-Z_]{1,21}(=|%3D)") { set $susquery 1; }
if ($args ~* "base64_encode") { set $susquery 1; }
if ($args ~* "(%24&x)") { set $susquery 1; }
if ($args ~* "(127.0)") { set $susquery 1; }
if ($args ~* "(globals|encode|localhost|loopback)") { set $susquery 1; }
if ($args ~* "(request|insert|concat|union|declare)") { set $susquery 1; }
if ($args !~ "^loggedout=true") { set $susquery 0; }
if ($args !~ "^action=jetpack-sso") { set $susquery 0; }
if ($args !~ "^action=rp") { set $susquery 0; }
if ($http_cookie !~ "^.*wordpress_logged_in_.*$") { set $susquery 0; }
if ($http_referer !~ "^http://maps.googleapis.com(.*)$") { set $susquery 0; }
if ($susquery = 1) { return 403; }
if ($args ~* "(%0|%A|%B|%C|%D|%E|%F)") { return 403; }

rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Eğer admin panelede özel bir ip den girilmesini istiyorsanız. Aşağıda ki kodları da ekleyebilirsiniz. IP static olursa iyi olur. Dinamik ip erişim sorunu yaratabilir.


location ~ ^wp-admin { allow xxx.xxx.xxx.xxx; deny all; }
location ~* ^/wp-admin/.*\.php { allow xxx.xxx.xxx.xxx; deny all; }

Eğer server parametrelerine ihtiyaç duyuyorsanız;
Linux/Nginx/PHP5.x için

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

Linux/Nginx/PHP7 için

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Bu kodlar server parametresinin içinde yer almalı.
VPS de birçok site barınıyorsa başlık örneği;

server {
listen *:80;
server_name sitenizinadi.com;
access_log /var/log/nginx/sitenizinadi.access.log;
error_log /var/log/nginx/sitenizinadi.error.log;
root /dosyayolunuz/;
index index.php index.html index.htm ;
server_name sitenizinadi.com;

......
}

VPS de tek site varsa server başlığı örneği;

server {
listen 80 default_server;
listen [::]:80 default_server;
root /dosyayolunuz/;
index index.php index.html index.htm;
server_name server_domain_yada_IP;

....
}