[Web Server] Nginx rewrite

 

Nginx을 사용하면 rewrite, try_files을 많이 사용 합니다. rewrite 기능은 자주 사용하니 알고 사용 합시다.

 

Rewrite 사용법

 

rewrite 문법은 아래와 같이 단순 합니다.

문법 : rewrite  정규표현식  대체문자열 [flag]

flag

  • last : Rewrite 실행을 종료하고 변경된 URI로 다시 처리를 시작 합니다.
  • break : Rewrite 처리를 종료 합니다. rewrite가 무한 반복 실행되는 것을 방지 합니다.
  • redirect : 302 temporary redirect 처리를 합니다.
  • permanent : 301 permanent redirect 처리를 합니다.

요청된 parameter는 rewrite 처리후에 변경된 URI 뒤에 자동으로 붙습니다.

 

 

 

오비컨

2018.02.21 ~ 2018.02.21, ver 0.01

 

 

 

Nginx URL rewrite for Mediawiki

 

Mediawiki를 사용할 때 URL rewrite 기능을 사용하면 편리한 점이 많습니다. 우선 긴 URL을 의미 있는 간단한 URL로 변경할 수 있고 폴더의 위치와 URL을 동일하게 유지할 필요도 없습니다.

 

서버 환경과 요구 사항

 

서버 환경

  • Nginx 사용 중
  • DOCUMENT_ROOT : /cloudnas/www/jopenbusiness/public_html/
  • Mediawiki가 설치된 폴더 : /cloudnas/www/jopenbusiness/public_html/mediawiki/

 

요구 사항

  • URL Rewrite 전 : http://www.jopenbusiness.com/mediawiki/index.php?title=SuiteCRM
  • URL Rewrite 후 : http://www.jopenbusiness.com/mediawiki/SuiteCRM

 

URL Rewrite 설정

 

vi  /etc/nginx/sites-available/jopenbusiness.conf

location / {
    rewrite    ^/mediawiki([^?]*)(?:\?(.*))?    /mediawiki/index.php?title=$1&$2 last;
index index.html index.htm index.php;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /mediawiki/index.php?title=$1&$args;
expires max;
log_not_found off;
}

 

vi  /cloudnas/www/jopenbusiness/public_html/mediawiki/LocalSettings.php

$wgScriptPath = “/mediawiki”;                                   #— Mediawiki가 설치된 폴더
$wgScript = “$wgScriptPath/index.php”;
$wgArticlePath = “/mediawiki/$1”;                           #— URL 호출 방법
$wgUsePathInfo = true;

 

참고 사이트

  • https://code.i-harness.com/ko/q/10ea968
  • https://www.mediawiki.org/wiki/Manual:Short_URL/wiki/Page_title_–_nginx_rewrite–root_access
  • https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

 

 

 

오비컨
2018.02.07 ~ 2018.02.12, ver 0.02

SELinux 설정 for Nginx

 

CentOS 7에서 SELinux를 사용할 때 Nginx에서 접속 권한 설정을 확인 합니다.
Nginx 접속 권한 설정
  • DOCUMENT_ROOT : /usr/share/nginx/html
  • SELinux 설정 여부 확인
    • getenforce
    • sestatus
    • cat /etc/selinux/config
  • Nginx 프로세스의 권한 확인
    • ps -efZ | grep nginx
  • DOCUMENT_ROOT 폴더의 권한 확인과 설정
    • cd ${DOCUMENT_ROOT}
    • s -alZ
    • chcon -R -t httpd_sys_rw_content_t *
  • Audit 로그 보기
    • tail -f /var/log/audit/audit.log
2018.01.23 ~ 2018.01.23, ver 0.01

 

Liferay DOC 문서 배포

Liferay Portal의 매뉴얼을 브라우저로 볼 수 있도록 Web Server에 배포 합니다.
Liferay Download 사이트에서 받은 파일을 사용 합니다.
  • HOME_WORK=/work
  • TEMPLATE_DIR=/work/template
  • DOCUMENT_ROOT=/usr/share/nginx/html

cd ${HOME_WORK}/install
wget https://jaist.dl.sourceforge.net/project/lportal/Liferay%20Portal/7.0.4%20GA5/liferay-ce-portal-doc-7.0-ga5-20171018150113838.zip

cd ${DOCUMENT_ROOT}
unzip ${HOME_WORK}/install/liferay-ce-portal-doc-7.0-ga5-20171018150113838.zip
mv liferay-ce-portal-doc-7.0-ga5 doc_liferay
chown -R nginx:nginx doc_liferay

cp ${TEMPLATE_DIR}/index.html doc_liferay//index.html             #— 첨부된 index.html
chown nginx:nginx doc_liferay//index.html

http://demo.obcon.co.kr/doc_liferay/ 사이트로 접속하여 문서를 볼 수 있습니다.
(demo.obcon.co.kr 대신에 배포한 서버의 이름을 적을 것)
 

2017.1204 ~ 2017.12.04, ver 0.01

[SuiteCRM] [설치가이드] Nginx 환경 구성

Nginx 1.10.2의 환경을 구성 합니다.
기본 환경 구성
vi  /etc/nginx/nginx.conf

http {
client_max_body_size 20M;                        #— 첨부 파일 최대 용량 설정. PHP에서도 설정할 것. 최소 20M 이상
charset  UTF-8;                                    #— 문자셋 설정

server {
charset  UTF-8;                                #— 문자셋 설정

location / {
index  index.php  index.html;
}

location /wordpress/ {
try_files  $url  $uri/  /wordpress/index.php$args;     #— WordPress에서 고유 주소 지정을 위한 설정
index  index.php  index.html;
}

#— Fastcgi 설정
location ~ \.(php)$ {
try_files  $uri =404;
fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index  index.php
fastcgi_read_timeout  180;                #— Timeout 시간 설정

include  fastcgi.conf;
}
}
}

방화벽 설정

firewall-cmd  –permanent  –zone=public  –add-service=http
firewall-cmd  –permanent  –zone=public  –add-service=https
firewall-cmd  –reload
firewall-cmd  –list-all

2017.11.15 ~ 2017.11.15, ver 0.01

[Web Server] Nginx – Trouble Shooting : upstream timed out

오류 원인
Nginx에서 fastcgi를 사용하여 php 등을 연동할 때 timeout 오류가 발생할 수 있습니다. 이런 경우 timeout 시간을 늘려 주면 됩니다.
오류 메시지
tail -f /var/log/nginx/error.log 명령어를 사용하여 로그를 확인 합니다.
2017/10/08 01:27:38 [error] 15852#0: *2208 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.56.1, server: _, request: “POST /demo/suitecrm/index.php HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php-fpm/php-fpm.sock”, host: “demo.obcon.co.kr”, referrer: “http://demo.obcon.co.kr/demo/suitecrm/index.php?module=UpgradeWizard&action=index

조치 방법

vi  /etc/nginx/nginx.conf
server  {
location  ~  \.(php)$  {
fastcgi_read_timeout  60;                    #— 여기 시간(초)을 늘여 줍니다.
}
}

systemctl  stop  nginx.service
systemctl  start  nginx.service

2017.11.10 ~ 2017.11.10, ver 0.01

[Web Server] Nginx 소개

Web Server는 예전에 Apache HTTP Server를 많이 사용 하였으나 최근에는 Nginx(엔진엑스)를 많이 사용 합니다.
Nginx는 동시 접속자 처리에 특화되어 있기 때문에 동시접속자가 약 700명 이상이면 Apache HTTP Server 대신 Nginx를 사용하는 것이 좋습니다.
많이 사용하는 Web Server
  • Apache HTTP Server : Thread 기반 모델 사용
  • Nginx : 이벤트 기반 모델 사용 (비동기, Non Blocking, 단일 Thread)
2017.11.10 ~ 2017.11.10, ver 0.01

[기술지원] crontab -e -u nginx 등록시 오류

 

 

SuiteCRM을 설치한 후 스케쥴러를 정상 동작하도록 설정하려면 crontab을 설정하여야 합니다.
오류 메시지

[root@demo html]# crontab -e -u nginx
no crontab for nginx – using an empty one
crontab: installing new crontab
“/tmp/crontab.wdqUAj”:1: bad hour
errors in crontab file, can’t install.
Do you want to retry the same edit? n
crontab: edits left in /tmp/crontab.wdqUAj


발생 원인
nginx 사용자가 linux로 로그인할 수 있도록 허용되어 있지 않아 발생하는 문제 입니다.
해결 방안
두가지 방법인 있는데 첫번째 방법은 nginx 사용자로 Linux로 로그인할 수 있도록 설정하는 방법이며 두번째 방법은 root 사용자로 crontab을 등록하고 crontab이 실행될 때 nginx 사용자 권한으로 실행되도록 하는 방법 입니다. 여기서는 첫번째 방법을 설명합니다.
vi  /etc/passwd
    nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin          #— 이 라인을 삭제
    nginx:x:996:994:Nginx web server:/var/lib/nginx:/bin/bash              #— 이 라인을 추가 
2017.11.20 ~ 2017.11.20, ver 0.01

대문을 특정 페이지로 전환

 

 

WordPress를 사용하다보면 테마에서 제공하는 정적인 전면페이지(대문)를 특정 페이지로 전환하고 싶은 경우가 발생 합니다.
테마에서 정적인 전면 페이지를 설정하는 화면을 제공하는데, 여기에서 특정 페이지를 설정하면 원하는 페이지외에 테마에서 제공하는 불필요한 정보가 표시되는 경우가 있습니다. 이런 경우에 아래 방법을 사용할 수 있습니다.
원하는 기능
http://~/wordpress/ 사이트로 접속시 http://~/wordpress/suitecrm/ 페이지로 전환 합니다.
설정 방법
Document Root 폴더(예, /usr/share/nginx/html/)에서 아래와 같이 작업 합니다.

#— Redirect를 위한 index.html 파일을 작성 합니다.
cd  wordpress
vi  index.html                                              #— 아래와 같은 내용으로 index.html 파일을 생성
<script type=”text/javascript”>
window.document.location = “/wordpress/suitecrm/”;
</script>
 
chown  nginx:nginx  index.html
 
 
#— Nginx에서 http://~/wordpress/ 사이트로 접속시 index.html 파일이 실행되도록 합니다.
vi  /etc/nginx/nginx.conf
        location /wordpress/ {
            index index.html;                            #— index.html 파일이 실행되도록 설정
        }
 
nginx  -s  reload                                        #— 변경한 설정 정보를 다시 로딩

 

위와 같이 설정을 마치면
http://~/wordpress/로 접속시 index.html 파일이 호출되고
이 index.html 파일에서 JavaScript가 /wordpress/suitecrm/ 페이지를 호출 합니다.
2017.10.16 ~ 2017.10.18, ver 0.02

 

 

Nginx와 Tomcat 6 연동

 

Apache Tomcat 설치

 yum install tomcat6 tomcat6-*

cp /usr/share/tomcat6/webapps/ROOT/*.gif /nas/www/ossnode101/public_html
cp /usr/share/tomcat6/webapps/ROOT/*.svg /nas/www/ossnode101/public_html
cp /usr/share/tomcat6/webapps/ROOT/*.ico /nas/www/ossnode101/public_html

vi /etc/nginx/sites-available/ossnode101.conf   #— 아래 항목을 추가 합니다.

    location ~ .do$ {
proxy_pass              http://localhost:8080;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        Host $http_host;
}
location ~ .jsp$ {
proxy_pass              http://localhost:8080;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        Host $http_host;
}
location ^~/servlets/* {
proxy_pass              http://localhost:8080;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        Host $http_host;
}

방화벽 설정 및 서비스 기동

setup                                 #— 방화벽에서 8080/tcp port를 오픈 합니다.

service tomcat6 restart

http://ossnode101.ossbiz.co.kr/index.jsp 사이트로 접속하여 Tomcat 화면을 표시해 봅니다.

 

파일