nginx에서 rewrite 사용하기?
본문
안녕하세요. @ignaz
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 |
---|---|
Default: | — |
Context: | server , location , if |
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;
}
}
}
server {}가 없을수가 없는데.. nginx.conf.default 파일로 다시 작업해보실래요?
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;
}
}