운영체제 이야기/Linux(CentOS)

[CentOS7] Nginx 설치 및 설정

한희성 2019. 4. 29.
반응형
  1. nginx 설치

    1. 참고 url : https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/
    2. repository설정

      $ vi /etc/yum.repos.d/nginx.repo
      -------------------------------------------
      [nginx]
      name=nginx repo
      baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
      gpgcheck=0
      enabled=1
    3. repository적용

      $ yum update
    4. 설치

      $ yum install nginx
  2. nginx설정
    1. 자동실행

      $ systemctl start nginx
      $ systemctl enable nginx
    2. start/stop/reload

      tomcat 계정에서는
      sudo systemctl start nginx
      sudo systemctl stop nginx
      sudo systemctl restart nginx
      sudo systemctl reload nginx
      sudo service tomcat10 start
      sudo service tomcat10 stop
  3. tomcat연동

    1. 단독서비스인 경우 (현재 가상화 대부분은 단독서비스로 쓰여져 템플릿은 이를 기반으로 생성함)
      1. default.conf백업

        $ cp default.conf default.conf.ori
      2. default.conf 변경 (모든 url에 대해 설정)

        server { listen 80; server_name localhost; client_max_body_size 500M; charset UTF-8; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; # location / { # root /usr/share/nginx/html; # index index.html index.htm; # } location /www_contents/ { alias /u00/www_contents/; #autoindex on; } location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #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/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }

    2. 서비스가 많은 경우

      $ vi /etc/nginx/conf.d/tomcat.conf ----------------------------------------------------------------- server { listen 80; server_name 도메인; client_max_body_size 500M; charset UTF-8; #access_log logs/host.access.log main; location /www_contents/ { alias /u00/www_contents/; autoindex on; } location / { #index index.html index.htm; proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #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 html; } }

  4. nginx user를 tomcat group에 추가

    $ gpasswd -a nginx tomcat

    추가하는 이유는 nginx에서 tomcat에 접근하기 위함( 파일시스템)

  5. 우분투의 경우 nginx를 구동하는 계정이 다를 수 있음
    1. nginx구동 중인 계정 확인

      $ ps -ef|grep nginx

      결과 예시

    2. 위 경우 www-data이므로 gpasswd -a www-data tomcat 수행




명령어는 아래 참고 


출처 : https://www.lesstif.com/pages/viewpage.action?pageId=43844026


service name reload

systemctl reload name.service

설정 재구동

service namecondrestart

systemctl try-restartname.service

서비스가 구동중이었을 경우에만 재시작

service name stop

systemctl stop name.service

서비스 중지

service namerestart

systemctl restart name.service

서비스 재시작

service name start

systemctl start name.service

서비스 시작

service name status

systemctl status name.service
systemctl is-active name.service

서비스 구동 여부 확인

service --status-all

systemctl list-units --type service --all

모든 서비스의 상태 표시


chkconfig name on

systemctl enable name.service

서비스 활성화(부팅시 자동 구동)

chkconfig name off

systemctl disable name.service

서비스 비활성화

chkconfig --listname

systemctl status name.service
systemctl is-enabled name.service

서비스의 활성화 여부 표시

chkconfig --list

systemctl list-unit-files --type service

모든 서비스의 현재 활성화 여부 표시

chkconfig --list

systemctl list-dependencies --after

현재 target 이후에 시작하는 서비스의 목록

chkconfig --list

systemctl list-dependencies --before

현재 target 이전에 시작하는 서비스


서비스 구동

서비스를 구동하려면 start 명령어 뒤에 서비스명을 주면 되며 아래 예제는 mariadb 서비스를 시작합니다.

$ sudo systemctl start mariadb.service
서비스 구동


서비스 중지

서비스 중지는 stop 옵션과 중지할 서비스 이름을 주면 되며 아래는 mariadb 서비스를 중지합니다.

$ sudo systemctl stop mariadb.service
서비스 중지


서비스 자동 시작

웹 서버, DBMS 서버등 서비스에 필요한 데몬들은 부팅과 동시에 자동으로 구동되어야 합니다.

CentOS 6 까지는 chkconfig 명령으로 자동 부팅 여부를 설정할 수 있었지만 Ubuntu 16, CentOS 7 부터는 systemctl enable명령을 사용하면 됩니다.

$ sudo systemctl enable mariadb.service
서비스 자동 시작


서비스 자동 시작 중지

자동 시작을 취소하고 싶은 경우  systemctl disable 명령을 사용하면 됩니다.

$ sudo systemctl disable mariadb.service
서비스 자동 시작 취소


동작중인 모든 서비스 목록

systemctl 에 등록된 유닛은 부팅시 자동 구동되는 모든 명령어도 포함되므로 만약 서비스만 보려면 필터 명령어인 --type=service 구문을 주면 됩니다.

또 이중에서 실행중인 서비스 목록만 뽑아 볼 경우 --state=running 옵션을 주면 되며 아래는 서비스중에 현재 동작중인 목록을 표시하는 명령입니다.

$ sudo systemctl list-units --type=service --state=running
 
 
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
auditd.service           loaded active running Security Auditing Service
avahi-daemon.service     loaded active running Avahi mDNS/DNS-SD Stack
crond.service            loaded active running Command Scheduler
dbus.service             loaded active running D-Bus System Message Bus
firewalld.service        loaded active running firewalld - dynamic firewall daemon
getty@tty1.service       loaded active running Getty on tty1
httpd.service            loaded active running The Apache HTTP Server
동작중인 서비스 목록


자동 시작 서비스 목록

부팅시 자동 시작되는 서비스중 필요없는 서비스가 있을 수 있습니다. 이를 확인하려면 먼저 전체 등록된 서비스중에 부팅시 자동으로 시작되는 서비스의 목록을 확인해야 하며 --state=enable 옵션으로 목록을 확인할 수 있습니다.

$ sudo systemctl list-unit-files --type=service --state=enabled
 
 
UNIT FILE                                   STATE 
auditd.service                              enabled
autovt@.service                             enabled
avahi-daemon.service                        enabled
crond.service                               enabled
dbus-org.fedoraproject.FirewallD1.service   enabled
dbus-org.freedesktop.Avahi.service          enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service  enabled
자동 시작 서비스 목록



journalctl 로 로그 보기

systemd 로 데몬 프로세스 구동시 데몬 프로세스가 제대로 구동되지 않을 경우 systemd 가 발행하는 로그 파일에 해당 이력을 남기게 됩니다. 그러므로 무엇때문에 구동에 실패했는지를 확인하려면 이 로그를 보아야 하며 이를 위해 journalctl 이라는 별도의 명령어를 사용하면 됩니다.


예로 아파치 웹 서버 구동에 실패하면 systemctl 은 아래와 같이 로그를 통해 원인을 파악하라는 메시지를 표시해 줍니다.

$ sudo systemctl restart apache2
 
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.

TODO systemctl status apache2.service, "journalctl -xe" 진하게 표시

서비스 실패 에러 메시지


안내 메시지처럼 systemctl status 명령어로 아파치 웹 서버의 상태를 확인할 수 있고 더 자세한 로그를 보려면 journalctl -xe 명령어를 사용하면 됩니다.

$ sudo journalctl -xe
 
 
-- Unit apache2.service has begun starting up.
 7월 09 00:23:39 ubuntu apache2[4750]: * Starting Apache httpd web server apache2
 7월 09 00:23:39 ubuntu apache2[4750]: *
 7월 09 00:23:39 ubuntu apache2[4750]: * The apache2 configtest failed.
 7월 09 00:23:39 ubuntu apache2[4750]: Output of config test was:
 7월 09 00:23:39 ubuntu apache2[4750]: [Sun Jul 09 00:23:39.723059 2017] [:crit] [pid 4760:tid 139925195380608] Apache is running
 7월 09 00:23:39 ubuntu apache2[4750]: AH00013: Pre-configuration failed
 7월 09 00:23:39 ubuntu apache2[4750]: Action 'configtest' failed.
 7월 09 00:23:39 ubuntu apache2[4750]: The Apache error log may have more information.
 7월 09 00:23:39 ubuntu systemd[1]: apache2.service: Control process exited, code=exited status=1

TODO 139925195380608] Apache is running 진하게 표시

journalctl 로그 보기


가끔 터미널 컬럼 길이보다 메시지가 길 경우 개행을 하지 않아서 에러 메시지를 보기가 어려운 경우가 있습니다. 위의 예제에서도 "Apache is running" 뒤에 에러 메시지가 있지만 개행하지 않아서 정확한 메시지를 읽을수가 없어서 원인 파악이 힘들어 집니다.


이런 경우 journalctl 에 pager 를 사용하지 않도록 설정하면 터미널 길이보다 긴 메시지는 자동 개행이 되므로 전체 에러 로그를 확인할 수 있습니다.

# journalctl -xn --no-pager
 
 
7월 09 00:23:39 ubuntu apache2[4750]: * The apache2 configtest failed.
 7월 09 00:23:39 ubuntu apache2[4750]: Output of config test was:
 7월 09 00:23:39 ubuntu apache2[4750]: [Sun Jul 09 00:23:39.723059 2017] [:crit] [pid 4760:tid 139925195380608] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
 7월 09 00:23:39 ubuntu apache2[4750]: AH00013: Pre-configuration failed
 7월 09 00:23:39 ubuntu apache2[4750]: Action 'configtest' failed.



반응형

댓글

💲 추천 글