Nginx로 클린 URL을 활성화하려면 어떻게해야합니까?


9

Drupal 7.x를 사용하고 있습니다. 깨끗한 URL없이 작동하도록했습니다.

조사한 결과, 각 드루팔 사이트마다 가상 호스트를 생성하고 다음 코드를 사용하여 깨끗한 URL을 활성화해야한다는 것을 이해했습니다.

if (-e $ REQUEST_FILENAME) {
     rewrite ^ / (. *) $ / index.php? q = $ 1 last;
}

또는이 코드를 사용할 수 있습니다.

location / {
         [... ]
         error_page 404 = @ drupal;
         [... ]
}

location @ drupal {
         rewrite ^ (. *) $ / index.php? q = $ 1 last;
}

그러나 vhost를 만들지 않으면 Apache와 같은 깨끗한 URL을 사용할 수 있음을 알았습니다. 설정에서 두 줄을 모두 시도했지만 결과가 없습니다. 깨끗한 URL을 활성화하면 항상 Nginx (로컬 호스트)라는 단어가 표시됩니다.

깨끗한 URL을 사용하는 올바른 방법은 무엇입니까?

이것은 / etc / nginx / sites-available / default의 구성입니다.

server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }

        location /images {
                root /usr/share;
                autoindex off;
        }
        # Only for nginx-naxsi : process denied requests
        #location /RequestDenied {
                # For example, return an error code
                #return 418;
        #}

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/www;
        }

        #Pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;
                #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/tmp/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

내 서버에 가상 호스트를 만들지 않았습니다. 나도 어떻게 알지


1
Drupal 문서에서 다음을 보거나 시도 했습니까? drupal.org/node/976392
geerlingguy

@geerlingguy 예. 이 코드 부분은 사이트에서 사용 가능한 기본 파일에 추가했으며 내 사이트에 들어갈 때 오류 500이 발생합니다. 또는 가상 호스트를 만들어야합니까?
Eduardo Eduardo

1
github.com/perusio/drupal-with-nginx를 살펴 보십시오 . Nginx 서버에서 Drupal을 실행시키는 데 필요한 모든 구성 옵션이 있습니다.
jamestsymp '12

답변:


11

다음은 성공적으로 작동합니다.

  location / {
    index index.php;
    # This is cool because no php is touched for static content
    try_files $uri $uri/ @rewrite;
    expires max;
  }

  location @rewrite {
    # Some modules enforce no slash (/) at the end of the URL
    # Else this rewrite block wouldn't be needed (GlobalRedirect)
    rewrite ^/(.*)$ /index.php?q=$1;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/var/run/php-fpm.sock; # fastcgi_pass unix:/tmp/php5-fpm.sock;
 }

파일에 추가 @rewrite하고 nginx를 다시 시작했지만 내 기능이 작동하지 않습니다. URL 정리를 활성화하면 로컬 호스트가 표시됩니다. location @rewrite{}/etc/nginx/sites-available/default
Eduardo Eduardo

2Eduardo : site.com/index.php 가 작동 중이고 첫 페이지가 열려 있다는 것을 의미 합니까?
Nikit

예. 프론트 페이지를 볼 수 있습니다. 그러나 다른 페이지는 없습니다
Eduardo

흠, 코드를 다시 붙여 넣을 수 있습니까?
Nikit

나를 위해 잘 작동
무례
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.