인터넷망 오픈과 로그인을 위한 Code-server 와 Nginx 구성
- 이번에는 오픈된 cloud 인터넷 망에 설치된 code-server 를 계속 열어놓고 사용하기엔 불안한 부분도 있고, 어느 기기에서나 좀 더 간편하게 언제든지 code-server 접근이 되도록 nginx proxy를 앞에 두고 로그인도 가능하도록 구성해봅니다.
- Safari 브라우저에서 nginx 로그인 뒤 code-server 로그인 후에 (blank) white screen 이슈가 있네요. 해결되면 업데이트하겠습니다. (Update: Mar 12, 2021)
환경 구성
- OS: CentOS 8.3.2011 (on Oracle cloud VM)
!!! 사용하려는 port가 (cloud network)방화벽에서 오픈되었는지 먼저 확인하세요 - Code-server: 3.9.0-amd64.rpm
- Nginx: v1.14.1 (with yum)
1. Code-server 설정 확인
; code-server 구성이 처음이라면 이전 code-server 설치 글 을 참고하세요.
USER1@ ~]$ cat /home/USER1/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: $myNewPassword
cert: false
2. Install Nginx
; CentOS에서 nginx 설치를 하니 Ubuntu 진행과 다르게 default.conf 파일과 폴더 등이 없습니다.
; /etc/nginx/nginx.conf 파일을 복사하여 가능하지만 Ubuntu OS에서 재구성할 경우를 대비해 Ubuntu 구성 절차로 진행했습니다.
USER1@ ~]$ sudo yum install nginx
USER1@ ~]$ sudo mkdir /etc/nginx/sites-available
USER1@ ~]$ sudo mkdir /etc/nginx/sites-enabled
USER1@ ~]$ sudo vi /etc/nginx/nginx.conf
[변경 전]
include /etc/nginx/conf.d/*.conf;
(...이하 생략...)
[변경 후]
server_tokens off; #off로 설정하면 에러페이지의 nginx 버전 숨김
include /etc/nginx/sites-enabled/*.conf;
# /etc/nginx/nginx.conf 파일 내 server {} 블록 주석처리
# server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
USER1@ ~]$ sudo vi /etc/nginx/sites-available/code-server.conf
upstream vm2-code-server { #upstream group name
server 127.0.0.1:8080; #code-server의 ip:port
}
server {
listen 7777; #외부에서 접근하는 port
listen [::]:7777;
server_name vm2.mydomain.com; #외부에서 호출하는 도메인 or VM ip
location / {
proxy_pass http://vm2-code-server; #upstream group name
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_buffering off;
#proxy_buffer_size 128k;
#proxy_buffers 4 256k;
#proxy_busy_buffers_size 256k;
}
}
USER1@ ~]$ sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.conf
USER1@ ~]$ cd /etc/nginx/sites-enabled/
USER1@ sites-enabled]$ ls -al
lrwxrwxrwx. 1 root root 43 Mar 12 14:29 code-server.conf -> /etc/nginx/sites-available/code-server.conf
[root@vm2 ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
USER1@ ~]$ sudo systemctl start nginx.service
USER1@ ~]$ sudo systemctl status nginx.service
USER1@ ~]$ sudo systemctl enable nginx.service
USER1@ ~]$ sudo systemctl -t service list-unit-files |grep -i nginx
nginx.service enabled
3. Nginx 구성 중 오류
3-1. (인터넷)외부에서 접근할 포트를 7777 등으로 설정하면 nginx 시작이 안되는 오류
오류 - [emerg] bind() to 0.0.0.0:7777 failed (13: Permission denied)
USER1@ ~]$ sudo systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2021-03-12 17:13:34 KST; 13s ago
Process: 3336 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
Process: 3334 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Mar 12 17:13:34 vm2 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 12 17:13:34 vm2 nginx[3336]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 12 17:13:34 vm2 nginx[3336]: nginx: [emerg] bind() to 0.0.0.0:7777 failed (13: Permission denied)
Mar 12 17:13:34 vm2 nginx[3336]: nginx: configuration file /etc/nginx/nginx.conf test failed
(..생략..)
조치 - 사용할 포트 추가 (또는 아래 3-2의 SELINUX=disabled 변경)
USER1@ ~]$ sudo semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
USER1@ ~]$ sudo semanage port -a -t http_port_t -p tcp 7777
USER1@ ~]$ sudo semanage port -l | grep http_port_t
http_port_t tcp 7777, 80, 81, 443, 488, 8008, 8009, 8443, 9000
USER1@ ~]$ sudo systemctl restart nginx.service
3-2. 웹 브라우저로 http:// {mydomain}:{port} 접근할 때 “502 Bad Gateway” 오류
조치 - selinux disabled
;selinux 는 사용하지 않기에 disabled 수정하고 리부팅 후 재확인
;selinux 안쓰면 미리 변경해줍시다. ㅠ.ㅠ
USER1@ ~]$ sudo vi /etc/selinux/config
[변경 전]
SELINUX=enforcing
[변경 후]
SELINUX=disabled
4. Nginx 암호 인증 구성
;htpasswd 만 필요하여 찾아서 설치
USER1@ ~]$ yum provides \*bin/htpasswd
Failed loading plugin "osmsplugin": No module named 'librepo'
Last metadata expiration check: 10:51:48 ago on Fri 12 Mar 2021 12:29:59 PM KST.
httpd-tools-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64 : Tools for use with the Apache HTTP Server
Repo : appstream
Matched from:
Other : *bin/htpasswd
USER1@ ~]$ sudo yum install -y httpd-tools
USER1@ ~]$ which htpasswd
/usr/bin/htpasswd
;로그인에 사용할 계정{myID}, 암호 설정
USER1@ ~]$ sudo htpasswd -c /etc/nginx/.htpasswd {myID}
New password:
Re-type new password:
Adding password for user {myID}
;auth_basic 인증 설정 추가
;MacOS/iPAD Safari 브라우저에서 nginx 로그인 후 code-server 로그인 뒤에 blank white screen 이슈가 있네요. 해결되면 업데이트하겠습니다. ㅠ.ㅠ
USER1@ ~]$ sudo vi /etc/nginx/sites-available/code-server.conf
upstream vm2-code-server { #upstream group name
server 127.0.0.1:8080; #code-server의 ip:port
}
server {
listen 7777; #외부에서 접근하는 port
listen [::]:7777;
server_name vm2.mydomain.com; #외부에서 호출할 도메인 or VM ip
location / {
proxy_pass http://vm2-code-server; #upstream group name
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
auth_basic "Authentication Page";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_buffering off;
#proxy_buffer_size 128k;
#proxy_buffers 4 256k;
#proxy_busy_buffers_size 256k;
}
}
; nginx 재시작 후 브라우저에서 암호 설정한 계정으로 로그인 테스트
USER1@ ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
USER1@ ~]$ sudo systemctl restart nginx.service
USER1@ ~]$
참고 글
- Code Server - 구축편
- AWS EC2에 code-server 설치하고 커스텀 도메인 ssl 배포까지
- How To Set Up Nginx Server Blocks on CentOS 7
- code-server /doc /guide.md
- 나는 nginx 설정이 정말 싫다구요
- Code Server Nginx 연결
- nginx에서 특정포트를 사용할때 막힐경우 [emerg] bind() to 0.0.0.0 failed
- nginx + PHP-fpm에서 502 Bad gateway 에러 해결법 총정리
- SELinux 사용하기
- [Nginx] 정적 웹 페이지 서버, 프록시 서버, 캐시 서버 구축하기
- Nginx 하위 경로를 다른 서버로 보내기
- How can I install the htpasswd utility in Red Hat / Scientific Linux?