nginx에서 rewrite 사용하기?

nginx에서 rewrite 사용하기?

QA

nginx에서 rewrite 사용하기?

본문

안녕하세요.  

centos에서 apache 쓰다가 nginx로 넘어갔습니다.

http://sir.kr/g5_tip/4022 'ignaz'님 짧은 주소 팁 설정을 하려고 하는데 잘 안되서요. 

 

nginx.conf에서  http { ... } 사이에 아래 코드를 넣었고요.. 

적용 방법에 아래처럼 수정하라고 되있어서..


# rewrite 적용하기
include rewrite.conf;
 
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  html$fastcgi_script_name;
	
    # shorturl 환경변수
    fastcgi_param  G5_SHORTURL_USE            $G5_SHORTURL_USE;
    fastcgi_param  G5_SHORTURL_BOARD_ONLY     $G5_SHORTURL_BOARD_ONLY;
    fastcgi_param  G5_SHORTURL_BOARD_NAME     $G5_SHORTURL_BOARD_NAME;
    fastcgi_param  G5_SHORTURL_BOARD_EXCLUDE  $G5_SHORTURL_BOARD_EXCLUDE;
    include        fastcgi_params;
}

 

rewrite.conf 파일도 nginx 폴더에 넣었는데 위 코드를 nginx.conf에 넣고 nginx을 restart 하면 

 

[root@taemin-sv nginx]# service nginx restart

nginx: [emerg] "set" directive is not allowed here in /etc/nginx/rewrite.conf:5

nginx: configuration file /etc/nginx/nginx.conf test failed

 

라고 에러가 자꾸 뜹니다.. 5번째 줄에 set $G5_SHORTURL_USE true; 라고 적혀있는데 뭐가 문제인지 모르겠네요 ㅠㅠ

 

이 질문에 댓글 쓰기 :

답변 4

첨부된 파일에 설명이 조금 미흡했나봐요 ^^;

에러를 확인해보니 "set" 지시어는 여기에 허용하지 않는다라고 하네요.

 

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#set 

 

Syntax:set $variable value;
Default:
Context:serverlocationif

 

server, location, if 에서만 사용 가능하므로 

http { ... } 사이에 코드를 넣었다면 오류가 나는게 맞습니다.

 


http {
    include       mime.types;
    default_type  application/octet-stream;
 
    ....중략....
 
    server {
        listen      80;
        server_name  www.mydomain.com;
        root /home/public_html;
        index index.php;
 
        ....중략 ....
 
        # rewrite 적용하기
        include rewrite.conf;
 
        location ~ \.php$ { 
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  html$fastcgi_script_name;
            
            # shorturl 환경변수
            fastcgi_param  G5_SHORTURL_USE            $G5_SHORTURL_USE;
            fastcgi_param  G5_SHORTURL_BOARD_ONLY     $G5_SHORTURL_BOARD_ONLY;
            fastcgi_param  G5_SHORTURL_BOARD_NAME     $G5_SHORTURL_BOARD_NAME;
            fastcgi_param  G5_SHORTURL_BOARD_EXCLUDE  $G5_SHORTURL_BOARD_EXCLUDE;
            include        fastcgi_params;
        }
    }
}

nginx.conf에는 server { } 가 없고 sites-enabled 폴더에 conf 파일을 따로 만들었습니다.
nginx.conf에서는 include sites-enabled/* 되있고요.
위에 코드처럼 중간에 include rewrite.conf 넣고 location ~ \.php$ { ... } 안에 shorturl 환경변수 내용 넣었는데 위 처럼 적용하고 nginx 재시작하면 404 Not Found가 떠버립니다..
추가한 코드 제거하면 다시 원래대로 되고요.. 뭐가 문제인지 모르겠네요..


user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf; #추가..

 

이게.. nginx.conf default 입니다..

사용중인 서버의 디폴트 파일이랑 조금 다르지만 확인해보니

centos에서 nginx 설치한 경우 이처럼 나오는거 같네요.

 

해당 폴더에 파일이 없다면 아래 코드로 파일 생성 후 적용해보세요.

 

cat > /etc/nginx/sites-available/default

server {
    listen       80 default_server;
    server_name  _;
    root   /srv/www/default;

    location / {
        index  index.html index.htm;
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /srv/www/default;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /srv/www/default;
    }
}
답변을 작성하시기 전에 로그인 해주세요.
전체 23

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT