Prj PJ
[리눅스] Nginx 설치 및 포트포워딩
솔헬레나
2023. 5. 23. 23:13

[ 사전설정 ]
- 공유기에서 기본포트 설정
ㄴ 리눅스 설치 후 Nginx를 설치할 OS의 IP를 공유기 설정에서 포트번호를 지정해준다.
1) Nginx를 설치할 리눅스의 IP주소를 복사한다 (리눅스 쉘에서 hostname -I 입력 후 엔터)
2) 공유기 설정 > port Forwarding에서 설정 가능하다.
기본적으로 https는 443, http는 80 으로 설정한다.

# 직접설치
1. Nginx를 설치한다
$ sudo apt-get install nginx
2. Nginx를 실행한다
$ sudo service nginx start
3. 브라우저에서 Nginx가 설치된 IP로 접근하여 아래 화면이 나오면 성공
Nginx가 실행되면 디폴트 포트인 80번으로 접근하면 아래 화면이 나타난다.

포트포워딩 설정
4. default.conf 파일을 열기한다
$ sudo vi /etc/nginx/sites-available/default
5. .yml파일에 원하는 포트번호 또는 포워딩할 URL을 기입한다.
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:"원하는 포트 번호";
proxy_redirect off;
charset utf-8;
}
6. 적용 및 재시작
$ sudo nginx -t
$ sudo service nginx reload
# docker 로 설치하기
1. docker을 설치한다
https://helena90-study.tistory.com/23
[리눅스] docker 설치하기
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.
helena90-study.tistory.com
2. 무료 인증서 생성 및 준비한다 ( TODO )
: https 를 사용하기 위함 http만 이용 시 불필요 , 그리고 하기의 443 설정도 80 으로 설정한다.
3. nginx설치를 위해 4가지의 파일을 작성한다.
ㄴ1) Dockerfile 작성
sudo vi DockerFile
FROM nginx:latest
USER root
RUN mkdir -p /var/www/www
RUN mkdir -p /var/www/blog
RUN mkdir -p /var/www/certbot
RUN mkdir -p /etc/letsencrypt
RUN chown nginx:nginx /var/www
RUN chown nginx:nginx /var/www/www
RUN chown nginx:nginx /var/www/blog
RUN chown nginx:nginx /var/www/certbot
RUN chown nginx:nginx /etc/letsencrypt
ADD ./nginx/nginx.conf /etc/nginx/nginx.conf
ㄴ2) docker-compose.yml을 작성
sudo vi docker-compose-nginx.yml
version: '3.3'
services:
nginx:
build:
context: .
dockerfile: Dockerfile
container_name: "home-nginx"
restart: unless-stopped
volumes:
- ./certbot/etc:/etc/letsencrypt
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
- ./docroot/www:/var/www/www
- ./docroot/blog:/var/www/blog
ports:
- 80:80
- 443:443
ㄴ3) nginx.conf를 작성
sudo vi ./nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 0;
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;
}
ㄴ4) default.conf 를 작성
sudo vi ./nginx/conf.d/default.conf
upstream blog_server {
keepalive 20;
server 워드프레스가설치된PC의IP:포트번호 max_fails=1 fail_timeout=10s;
}
# solena.kr 설정 ( 다른 곳에서 추가했을 기본설정- 참고용)
server {
listen 80;
listen [::]:80;
server_name solena.kr;
charset utf-8;
root /var/www/www;
access_log /var/log/nginx/www.solena.kr_access.log;
error_log /var/log/nginx/www.solena.kr_error.log error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
return 301 https://www.$host$request_uri;
}
}
server {
listen 443 ssl;
server_name solena.kr;
server_tokens off;
charset utf-8;
root /var/www/www;
access_log /var/log/nginx/www.solena.kr_access.log;
error_log /var/log/nginx/www.solena.kr_error.log error;
ssl_certificate 보안키 위치 정보입력 ;
ssl_certificate_key 보안키정보 입력 ;
location / {
return 301 https://www.$host$request_uri;
}
}
# 블로그주소 설정
server {
listen 80;
listen [::]:80;
server_name 블로그주소;
charset utf-8;
root /var/www/blog;
access_log /var/log/nginx/blog.solena.kr_access.log;
error_log /var/log/nginx/blog.solena.kr_error.log error;
location / {
return 301 https://$host$request_uri;
}
}
#https설정
server {
listen 443 ssl;
server_name 블로그주소;
server_tokens off;
charset utf-8;
root /var/www/blog;
access_log /var/log/nginx/blog.solena.kr_access.log;
error_log /var/log/nginx/blog.solena.kr_error.log error;
ssl_certificate 보안키 정보;
ssl_certificate_key 보안키 정보;
client_max_body_size 0;
chunked_transfer_encoding on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
add_header Pragma "no-cache";
add_header X-Frame-Options sameorigin;
client_body_buffer_size 1m;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_502 http_503;
proxy_connect_timeout 2;
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 300;
# /api 경로로 오는 요청을 백엔드 upstream 의 /api 경로로 포워딩
# location /api {
# proxy_pass http://myweb-api/api;
# }
# / 경로로 오는 요청을 백엔드 upstream 의 / 경로로 포워딩
location / {
proxy_pass http://blog_server;
}
}
ㄴ4) docker 실행
docker-compose -f docker-compose-nginx.yml up -d
# docker log 보기
docker logs -f --tail 10 home-nginx
docker logs -f --tail 10 home-nginx
# home certbot
DOMAIN={domainURL} docker-compose -f docker-compose-certbot.yml up
#clean
docker rm -f ${docker ps -a -q}