WordPress Nginx 설정 안내

9624 단어
이 글 은 대부분 wordpress. org 홈 페이지 에 대한 번역 에서 나온다.마음 에 들 면 공식 에 제출 하 겠 습 니 다.https://codex.wordpress.org/Nginx
LAMP (Linux + Apache + MySQL + PHP) 는 현재 WordPress 에서 가장 유행 하 는 기술 창 고 를 만 들 지만 Nginx 를 사용 할 수도 있 습 니 다.WordPress 는 Nginx 를 지원 합 니 다. WordPress. com 과 같은 대형 WordPress 사 이 트 는 Nginx 를 기반 으로 합 니 다.
Nginx 를 실시 하 는 방법 은 많 습 니 다.Aach 의 사전 reverse - proxy (역방향 에이전트) 로 사용 할 수 있 으 며, Apache 의 특성 과 기능 을 동시에 사용 할 수 있 으 며, Nginx 고속 의 장점 도 얻 을 수 있다.nginx 를 사용 하 는 많은 사이트 들 이 실제로 Apache 를 실행 하고 있 으 며, Nginx 는 reverse proxy 로 사용 되 고 있다.
이 안내 서 는 Apache 대신 독립 된 Nginx setup 설정 에 사 용 됩 니 다.Nginx 는 Apache 의 완전한 대체 품 이 아 닙 니 다.WordPress 의 배치 시작 에 대하 여 시작 하기 전에 이 관건 들 을 주의 하 십시오.
  • Nginx 에는 디 렉 터 리 급 프로필 (Apache 와 같은. htaccess 나 IIS 와 같은 웹 config 파일) 이 없습니다. 모든 설정 은 관리자 가 server level 을 처리 할 때 완료 되 며, 모든 WordPress 는 설정 을 수정 할 수 없습니다.
  • Nginx 를 사용 할 때 고정 링크 기능 (Pretty Permalinks functional) 을 모방 하 는 것 이 조금 다르다
  • Nginx 는. htaccess - type 능력 이 없 기 때문에 워드 프레스 는 서버 설정 을 자동 으로 수정 할 수 없습니다. (rewrite rules 가 자동 으로 생 성 되 지 않 습 니 다)
  • 인 스 톨 을 수정 하지 않 으 면 "index. php" 는 고정 링크 에 추 가 됩 니 다. (플러그 인 이나 하위 테마 "child theme" 의 functions. php 에 사용자 정의 코드 를 추가 합 니 다)
  • 마지막 으로 htaccess 의 일부 기능 을 사용 해 야 한다 면 기술적 으로 htscanner PECL extension for PHP 를 설치 하여 실현 할 수 있 습 니 다. (이것 은 완벽 한 해결 방안 이 아니 므 로 사이트 가 출시 되 기 전에 충분 한 테스트 와 Debug)
  • 이 안내 서 는 Nginx 를 설치 하고 설정 하 는 것 을 포함 하지 않 습 니 다. Nginx 를 설치 하고 Nginx 의 기본 작업 디 버 깅 지식 을 알 고 읽 는 것 을 권장 합 니 다.
    유 니 버 설 다 중 사이트 지원 (일반 및 다 중 사이트 지원)
    WordPress 가 Nginx 와 함께 작업 하려 면 백 엔 드 pp - cgi 를 설정 해 야 합 니 다. FastCGI 나 PHP - FPM 을 선택 할 수 있 습 니 다. PHP 5.3 에 pp - fpm 가 직접 설치 되 어 있 기 때문에 사용 합 니 다.
    Nginx 설정 은 5 개의 서로 다른 파일 로 나 뉘 어 있 습 니 다. 이해 하기 쉽 도록 모든 설정 에 대해 상세 하 게 설명 되 어 있 습 니 다. 필 자 는 가능 한 한 Nginx 설정 의 '최고의 실천' 을 시도 해 보 았 습 니 다.
    주 시작 파일 (일반)
    이 파일 은 / etc / nginx / nginx. conf (또는 / etc / nginx / conf / nginx. conf 는 Arch Linux 를 사용 합 니 다) 입 니 다.
    # Generic startup file.
    user {user} {group};
    
    #      CPU 。     "grep processor /proc/cpuinfo | wc -l"    
    worker_processes  2;
    
    error_log  /var/log/nginx/error.log;
    pid        /var/run/nginx.pid;
    
    # Keeps the logs free of messages about not being able to bind().
    #daemon     off;
    
    events {
        worker_connections  1024;
    }
    
    http {
    #   rewrite_log on;
        include mime.types;
        default_type       application/octet-stream;
        access_log         /var/log/nginx/access.log;
        sendfile           on;
    #   tcp_nopush         on;
        keepalive_timeout  3;
    #   tcp_nodelay        on;
    #   gzip               on;
    #php max upload limit cannot be larger than this                   
        client_max_body_size 13m;
        index              index.php index.html index.htm;
    
        # Upstream to abstract backend connection(s) for PHP.
        upstream php {
            #this should match value of "listen" directive in php-fpm pool
            server unix:/tmp/php-fpm.sock;
    #       server 127.0.0.1:9000;
        }
    
        include sites-enabled/*;
    }
    

    표준 nginx. conf 파일 과 는 조금 다 릅 니 다. 이 설정 은 Ubuntu / Debian 성명 의 최대 탄력성 시작 사이트 (enabled sites) 법 에 따라 "sites - available" 로 설정 을 저장 한 다음 "sites - enabled" 에 연 결 된 프로필 입 니 다.
    단일 사이트 설정 (사이트 구성 당)
    # Redirect everything to the main site. We use a separate server statement and NOT an if statement - see http://wiki.nginx.org/IfIsEvil
    
    server {
            server_name  _;
            return 302 $scheme://example.com$request_uri;
    }
    
    server {
        server_name example.com;
        root /var/www/example.com;
    
        index index.php;
    
        include global/restrictions.conf;
    
        #          
    
        #            
        include global/wordpress.conf;
    #   include global/wordpress-ms-subdir.conf;
    #   include global/wordpress-ms-subdomain.conf;
    }
    

    설정 을 여러 세 션 으로 나 누 어 여러 파일 에 넣 으 면 같은 논리 적 재 활용 이 가능 합 니 다. 'global' 하위 디 렉 터 리 는 추가 기능 설정 (유 니 버 설 기능) 을 추가 하 는 데 사용 할 수 있 습 니 다. (Nginx 설치 설정 을 기반 으로 디 렉 터 리 는 / etc / nginx / conf / global / 일 수도 있 습 니 다.)
    전역 제한 파일
    # Global restrictions configuration file.
    # Designed to be included in any server {} block.
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    
    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
    location ~ /\. {
        deny all;
    }
    
    # Deny access to any files with a .php extension in the uploads directory
    # Works in sub-directory installs and also in multisite network
    # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
    location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }
    

    General WordPress rules
    단일 사이트 설치 상황 에 있어 서 이것 은 'global / ordpress. conf' 파일 입 니 다.
    # WordPress single site rules.
    # Designed to be included in any server {} block.
    # Upstream to abstract backend connection(s) for php
    upstream php {
            server unix:/tmp/php-cgi.socket;
            server 127.0.0.1:9000;
    }
    
    server {
            ## Your website name goes here.
            server_name domain.tld;
            ## Your only path reference.
            root /var/www/wordpress;
            ## This should be in your http block and if it is, it's not needed here.
            index index.php;
    
            location = /favicon.ico {
                    log_not_found off;
                    access_log off;
            }
    
            location = /robots.txt {
                    allow all;
                    log_not_found off;
                    access_log off;
            }
    
            location / {
                    # This is cool because no php is touched for static content.
                    # include the "?$args" part so non-default permalinks doesn't break when using query string
                    try_files $uri $uri/ /index.php?$args;
            }
    
            location ~ \.php$ {
                    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                    include fastcgi.conf;
                    fastcgi_intercept_errors on;
                    fastcgi_pass php;
                    fastcgi_buffers 16 16k;
                    fastcgi_buffer_size 32k;
            }
    
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    expires max;
                    log_not_found off;
            }
    }
    

    nginxv. 10 및 그 후 버 전의 최신 예, Ref:https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
    WordPress Multisite Subdirectory rules
    다 중 사이트 하위 디 렉 터 리 설치, 대응 하 는 'global / ordpress. conf' 파일 은 다음 과 같 습 니 다.
    # WordPress multisite subdirectory rules.
    # Designed to be included in any server {} block.
    map $uri $blogname{
        ~^(?P/[^/]+/)files/(.*)       $blogpath ;
    }
    
    map $blogname $blogid{
        default -999;
    
        #Ref: http://wordpress.org/extend/plugins/nginx-helper/
        #include /var/www/wordpress/wp-content/plugins/nginx-helper/map.conf ;
    }
    
    server {
        server_name example.com ;
    
        root /var/www/example.com/htdocs;
        index index.php;
    
        location ~ ^(/[^/]+/)?files/(.+) {
            try_files /wp-content/blogs.dir/$blogid/files/$2 /wp-includes/ms-files.php?file=$2 ;
            access_log off;     log_not_found off; expires max;
        }
    
        #avoid php readfile()
        location ^~ /blogs.dir {
            internal;
            alias /var/www/example.com/htdocs/wp-content/blogs.dir ;
            access_log off;     log_not_found off; expires max;
        }
    
        if (!-e $request_filename) {
            rewrite /wp-admin$ $scheme://$host$uri/ permanent;
            rewrite ^(/[^/]+)?(/wp-.*) $2 last;
            rewrite ^(/[^/]+)?(/.*\.php) $2 last;
        }
    
        location / {
            try_files $uri $uri/ /index.php?$args ;
        }
    
        location ~ \.php$ {
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass php;
        }
    
        #add some rules for static content expiry-headers here
    }
    

    Ref: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
    HTTPS in Nginx
    Nginx 에서 HTTPS 를 여 는 것 은 매우 간단 합 니 다.
    server {
        #      IPv4 and IPv6 on 443 ,    and enables HTTPS and HTTP/2 support.
        # HTTP/2 is available in nginx 1.9.5 and above.
        listen *:443 ssl http2;
        listen [::]:443 ssl http2;
    
        # indicate locations of SSL key files.
        ssl_certificate /srv/www/ssl/ssl.crt;
        ssl_certificate_key /srv/www/ssl/ssl.key;
        ssl_dhparam /srv/www/master/ssl/dhparam.pem;
        
        # indicate the server name
        server_name example.com *.example.com;
    
        # 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; includeSubDomains";
    
        # Set caches, protocols, and accepted ciphers. 
        # This config will merit an A+ SSL Labs score as of Sept 2015.
        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-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA256;
    }
    

    Mozilla 는 아주 좋 은 SSL 설정 생 성 도 구 를 제공 합 니 다.
    PS: 다음은 인용 과 캐 시 에 관 한 것 입 니 다. 계속 진행:
    WP Super Cache Rules
    W3Total Cache Rules
    Nginx fastcgi_cache
    Better Performance for Static Files in Multisite
    Notes

    좋은 웹페이지 즐겨찾기