[nginx] 직접 설치 By starseat 2022-09-21 08:58:12 server/oss Post Tags # Nginx 직접 설치 `web server` 가 필요하여 `nginx` 를 설치 하게 되었다. `yum` 을 이용하여 설치하여도 되지만 직접 설치하여 설치 과정을 기록하려 한다. ## Nginx 다운로드 `nginx-1.23.1` 을 클릭하여 다운로드 한다. - 다운로드 링크: [http://nginx.org/en/download.html](http://nginx.org/en/download.html) ![image.png](/uploads/_temp/20220921/2a7e898e5710d674838f253a387f3ede.png) ## 설치 환경 남는 장비가 있어 여기다 설치하려 한다. 확인해보니 `OS` 는 `CentOS v7.9` 였다. ![image.png](/uploads/_temp/20220921/01583a9b2da825b0d6e0e67c0769210e.png) ## 설치 준비 - `yum update` 를 하여 최신화 한다. ``` yum update -y ``` - `nginx` 설치에 필요한 패키지들을 설치한다. - 설치에 필요한 패키지 외에 몇가지를 좀 더 추가하였다. ``` yum install -y pcre-devel libxml2-devel zlib zlib-devel openssl openssl-devel gcc g++ cpp gcc-c++ libxslt libxslt-devel php-gd libgd-dev gd gd-deve l perl perl-ExtUtils-Embed geoip-devel policycoreutils-python net-tools ``` - 운영중에는 `admin` 계정을 사용하지 못할수도 있으므로 일반 계정을 생성한다. - `web` 이라고 표시하였는데 필요한 계정으로 바꿔서 생성하면 될 듯 하다. ``` adduser web passwd web ``` - `FTP` 로 서버에 파일을 올라거나 `wget` 등을 통해서 서버에 `nginx-1.23.1.tar.gz` 파일을 준비한다. ![image.png](/uploads/_temp/20220921/442ecde02c4b2a66148d8bbc88e10a74.png) ## 설치 - `web` 계정의 home 디렉토리 구조는 다음과 같다. 이 중에서 `webserver` 에 `nginx` 를 설치할 것이다. ```text /home/web ├── download | └── nginx-1.23.1.tar.gz └── webserver // nginx 설치 경로 ``` - 압축 풀기 ``` tar -zxvf nginx-1.23.1.tar.gz ``` - 설치 설정 - prefix: 설치 경로 지정 - user, group: 설치 계정, 그룹 지정 - 그 외는 [Google 검색](https://www.google.com/search?q=nginx+configure+option&rlz=1C1FHFK_koKR1011KR1011&sxsrf=ALiCzsbmpip8Hu2_qL7NJo-AS7NXpOdWVw%3A1663722696301&ei=yGQqY7X1EZOAmgaXxoHYDQ&ved=0ahUKEwi1-cSC2qT6AhUTgMYKHRdjANsQ4dUDCA4&uact=5&oq=nginx+configure+option&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzoKCAAQRxDWBBCwAzoFCAAQgAQ6BQgAEMsBOgQIABAeOgYIABAeEAhKBAhBGABKBAhGGABQ6gNYuhJg-BRoAXABeACAAZkBiAH0B5IBAzAuN5gBAKABAcgBCsABAQ&sclient=gws-wiz-serp) 하면 자세한 내용이 있다. ``` cd nginx-1.23.1 ./configure \ --prefix=/home/web/webserver \ --user=web \ --group=web \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_ssl_module ``` - configure 설정 화면 ![image.png](/uploads/_temp/20220921/04dd55a5266f4d17b6e7b3e9a1b801a5.png) - configure 설정 완료 ![image.png](/uploads/_temp/20220921/b20c1b8448a73b65f6b1e76f93f9275b.png) - 설치 준비 설정이 완료되면 `Makefile` 이 생성되어 있을 것이다. 이제 설치를 진행하자. ![image.png](/uploads/_temp/20220921/f793e03a7480120c98bf3ea32205db81.png) ``` make ``` ![image.png](/uploads/_temp/20220921/8b9bcdd18ca4d605a9b3deeefbd4da8d.png) ``` make install ``` ![image.png](/uploads/_temp/20220921/9451a6e8f12fc5082796da2a86cf617c.png) ## 설치 확인 설치 과정 중 `error` 문구가 없다면 정상적으로 설치가 완료된 것이다. 지정한 경로(`prefix` 옵션) 에 잘 설치 되었는지 확인해 보자. ![image.png](/uploads/_temp/20220921/1ce402481a5a68dd738517bee0fb7d7c.png) ## 실행 테스트로 `nginx` 실행파일을 실행해 보자. ### permission 오류 실행해보면 `permission` 오류가 나는데 구글링 해보니 다음과 같이 해결책이 있었다. ![image.png](/uploads/_temp/20220921/e0deb7001f4451108f9a9a7a99bccf05.png) 아래 내용들은 `root` 계정으로 실행하여야 한다. - `SELinux` 활성화 확인 - `Port 권한` 추가 ``` // port list 확인 (root) semanage port -l | grep http_port_t // port 추가 (root) semanage port -a -t http_port_t -p tcp 80 ``` 만약 `semanage: command not found` 메시지가 나타난다면 `policycoreutils-python` 패키지가 설치되지 않은 것이다. `root` 로 접속하여 설치해주자. ``` (root) yum install -y policycoreutils-python ``` 확인을 해보면 `80` 포트는 이미 추가가 되어 있다. ![image.png](/uploads/_temp/20220921/65dce87144da62b2cf1437ccf5f4f735.png) 이걸 보면 포트 문제는 아닌 듯 하다. ### sudo 추가 sudo 추가는 [[apache] httpd yum 설치 후 일반계정 실행](https://starseat.net/blog/view/48) 게시글 중 `권한 부여` 항목에 작성해 두었다. 이 글을 참조하여 sudo 를 추가해 주자. ### 다시 실행 sudo 권한 추가 후 `nginx` 를 실행하면 정상적으로 실행이 된다. ![image.png](/uploads/_temp/20220921/563e7e53c14a762854989cd6466759f1.png) ![image.png](/uploads/_temp/20220921/3ed4b68821acb5e83d8b42a405d08a77.png) # 참고 ## frontend 를 위한 설정 많은 설정이 있겠지만 `frontend` 용 `nginx config` 를 추가하였다. 어디까지나 참고용으로 올린 내용이다. - web1: 80 port - web2: 30080 포트 ``` #user nginx; user root; worker_processes auto; error_log /apps/logs/error.log notice; #pid /apps/nginx.pid; 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 /apps/logs/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; server { listen 80; client_max_body_size 5M; location / { alias /apps/web1/; try_files $uri $uri/ index.html; } } server { listen 30080; client_max_body_size 5M; location / { alias /apps/web2/; try_files $uri $uri/ index.html; } } } ``` Previous Post [k8s] 명령어 Tip Next Post [ELK] elasticsearch 및 kibana 설치