Extra Form
PHP PHP 7.3
CMS WordPress

안녕하세요?

 

여기 능력자분들이 많다고 소문을 듣고 찾아왔습니다. 

그리고 때로는 다른 CMS에 대한 질문에도 관대하다고들어서.. 염치를 무릅쓰고 여기에 질문을 올려봅니다.

 

저는 우분투 18.04+ nginx를 적용한 가상서버에 워드프레스 사이트를 운영하려고 하고 있습니다.

- 우분투 18.04

- nginx 1.15.12

- PHP 7.3

- 사용 CMS : wordpress 5.11

- 문제가된 플러그인 Wordpress Social login( https://wordpress.org/plugins/wordpress-social-login/ )

- ufw에서 80, 443, 587, SFTP용 port만 허용해놓은 상태

 

지금 한참 사이트를 구성하고 있는데요. 소셜로그인 플러그인을 설치하다보니 아래와 같은 문제로 작동이 안되더군요.

 

Error: Your web server returned "404 Not Found" when checking WSL end-points.

This issue usually happen when :

1. Your web host uses mod_security to block requests containing URLs (eg. hosts like HostGator, GoDaddy and The Planet). On this case, you should contact your provider to have WSL end-points urls white-listed.

2. There is a .htaccess file that prevent direct access to the WordPress plugins directory.

In any case, WSL requires this url to be white-listed:

 

여기에는 플러그인을 설치된 폴더 URL을 화이트리스트에 포함시키라는 주문을 하고 있는데요. 

nginx에서 특정 URL을 화이트리스트에 포함시키는 방법을 몰라서 헤매고 있습니다.

 

혹시 아시는 분이 있다면 어떤 자료나 참고 사이트를 알려주시면 공부해서 배우도록 하겠습니다

 

이러한 것이 보안에 문제가 되는지 모르겠습니다. 그 플러그인은 상당히 널리 알려지것이라서 보안 문제가 있다고 생각하기는 어렵습니다.

 

미리 감사드리고 모두 행운이 깃들기를 기원하겠습니다.

 

감사합니다.

 

  • ?
    server 블럭에 allow 혹은 deny하면 되는데,
    첫번째로 mod_security가 헤체되어 있는지 확인해보시고, .htaccess도 확인해보세요.
  • ? profile
    궁금한게 있는데 nginx가 .htaccess 영향이 있나요?
  • profile profile
    영향이 없죠. 먹히지 않으니.....ㅠㅠ
  • profile ?
    아..위에 .htaccess 확인해보라는걸 그대로 해석했습니다. Nginix라고 써져있는데 큐ㅠㅠㅠ
  • profile
    mod_security 설정을 어떻게 했는지 확인해 보세요.
  • ?
    location / {
    if (!-e $request_filename){
    rewrite ^(.*)$ /index.php break;
    }
    }
  • ?
    안녕하세요?
    회사 일로 정신이 없어서 이제야 들어왔습니다.

    1. 말씀드린대로 nginx라서 .htaccess나 mod_security는 상관없을 것 같습니다.

    2. 도토리믁님께서 제안해주신 location / { 이하 문법은 에러가 납니다.
    3. 도토리묵님께서 말씀하신 nginx configure 파일에 특정 URL을 허용하는 문법은 어찌되는지 알 수 있을까요?
    저는 무식 용감하게 allow /wp-content/plugins/wordpress-social-login-master/hybridauth/ 이렇게 적용해 보았는데 먹히지않더군요.

    참고로 nginx site configure는 아래와 같습니다.
    감사합니다.

    server {
    listen 80;
    server_name mydomain.com www.mydomain.com;
    return 301 https://$server_name$request_uri;
    }

    server {
    listen 443 ssl http2;
    server_name mydomain.com www.mydomain.com;
    root /home/mydomain;

    index index.php;

    #set same size as post_max_size(php.ini or php_admin_value).
    client_max_body_size 1024M;

    server_tokens off; # 버전 숨기기 활성화

    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    #add_header X-XSS-Protection "1; mode=block";

    charset utf-8;

    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/mydomain.com/chain.pem;

    ssl_dhparam /etc/nginx/ssl/dhparams.pem;

    # Enable HSTS. This forces SSL on clients that respect it, most modern browsers. The includeSubDomains flag is optional.
    add_header Strict-Transport-Security "max-age=31536000";

    # Set caches, protocols, and accepted ciphers. This config will merit an A+ SSL Labs score.
    #ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    access_log /var/log/nginx/mydomain.com.access.log;
    error_log /var/log/nginx/mydomain.com.error.log warn;

    location / {
    try_files $uri $uri/ /index.php?$args;
    index index.php index.html index.htm;
    }


    set $skip_cache 0;

    # ---------------------------------------------------------------------
    # 캐싱을 하지 말아야 할 경우가 있는데 이를 정의하는 구간 CACHE SKIP RULES - START
    # ---------------------------------------------------------------------

    # Do not cache POST requests - they should always go to PHP
    if ($request_method = POST) {
    set $skip_cache 1;
    }

    # Do not cache URLs with a query string - they should always go to PHP
    if ($query_string != "") {
    set $skip_cache 1;
    }

    # WooCommerce-specific cache skip rules
    if ($request_uri ~* "/store.*|/cart.*|/my-account.*|/checkout.*|/addons.*") {
    set $skip_cache 1;
    set $skip_cache_reason WP_WooCommerce;
    }

    if ($cookie_woocommerce_items_in_cart) {
    set $skip_cache 1;
    set $skip_cache_reason WP_WooCommerce;
    }

    if ($request_uri ~* ("/cart.*")) {
    set $skip_cache 1;
    }

    # Don't cache URIs containing the following segments (admin panel, sitemaps, feeds, etc.)
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $skip_cache 1;
    }

    # Don't use the cache for logged-in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
    }

    # ---------------------------------------------------------------------
    # CACHE SKIP RULES - END
    # ---------------------------------------------------------------------


    # Add PHP handler
    location ~ \.php$ {

    try_files $uri =404; # comment out this line if php-fpm is hosted on a remote machine
    include /etc/nginx/fastcgi.conf;
    fastcgi_cache WORDPRESS;
    add_header X-Cache $upstream_cache_status;
    #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;

    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
    return 404;
    }
    }



    # Aggressive caching for static files that rarely/never change
    location ~ \.(?:asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
    expires 31536000s;
    #add_header Pragma public; # HTTP1.0에서 사용하던 명령으로 같이 사용하지 않음
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location ~ \.(?:css|js)$ {
    expires 86400s;
    #add_header Pragma public; # HTTP1.0에서 사용하던 명령으로 같이 사용하지 않음
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    # AMP 삭제 후 AMP 주소로 오는 요청을 오리지널 페이지 주소로 되돌림
    #location ~ /amp/$ {
    # rewrite ^(.*/)amp/$ $1 permanent;
    #}

    location ~ /(\.|wp-config.php|readme.html|license.txt|wp-comments-post.php) {
    deny all;
    }

    location ~ /\.(ht|git|svn) {
    deny all;
    }

    location ~ /.*\.(inc|ini|conf|cfg)$ {
    deny all;
    }

    #Block scripts from being run that shouldn’t be running
    location ~* .(pl|cgi|py|sh|lua)$ {
    return 444;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    #the site that should not be public
    location ~* wp-admin/includes { deny all; }
    location ~* wp-includes/theme-compat/ { deny all; }
    location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
    location /wp-content/ { internal; }
    location /wp-includes/ { internal; }

    # Stop Image Hotlinking
    location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked happist.com *.happist.com slowzin.com *.slowzin.com nextrend.co *.nextrend.co goodtrip.kr *.goodtrip.kr mydomain.com *.mydomain.com blog.naver.com/ihappist *.blog.naver.com/ihappist disco.me *.disco.me;
    if ($invalid_referer) {
    return 403;
    } }


    location @wp_admin_ban {
    rewrite ^(.*) http://mydomain.com permanent;
    }

    # Add trailing slash to */wp-admin requests.
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;





    }
  • ? ?
    https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
  • ?
    안녕하세요?

    관련 지식이 전무한 관계로 여러 힌트를 주셨음에도 불구하고 풀리지않이 임시방편으로
    아래와 같은 코드를 추가해 임시적으로 사용 가능하게는 만들었습니다.
    이게 보안에 문제가 없는지는 여러 경로로 확인해 봐야겠습니다.
    혹시 의견 주시면 감사하겠습니다.

    그리고 신경써주신 도코리묵님을 비롯한 많은 분들께 진심으로 감사드립니다.

    아래는 추가한 코드입니다.

    location /wp-content/plugins/wordpress-social-login/hybridauth/ { allow all; }