2018. 6. 28. 13:58

처음에, Web Station으로 시놀로지에 도메인를 연결해서 홈페이지를 쓰다가, 


사이트를마다, 어떤건, Oracle, 어떤건 mySql 등을 써서...귀찮아서, 


시놀로지에 Docker를 설치하고, 도커로 웹서버를 하나 만들었다.(도커 사용법은 따로 포스팅하겠다.)


그리고 포트를 들어가는 포트를 예로 8122로 세팅을 했다고 치면,


그리고, www.test.com이라는 도메인을 치면, 위 콘테이너로 가게 하고 싶은거다.


www.test.com:8122 이렇게 포트 쓰는거 없이...




#도커 포트 설정확인




#Web Station에서의 도메인 세팅




가상호스트 에서 생성을 해서 


밑에 처럼 세팅을 해주면, 웹서버는 Nginx 또는 Apache 등 선택하고, php선택가능하다.



하지만, 웹서버마다, 다 세팅이 틀려서,


결국 도커를 선택하고, 


콘테이너들을 만들었다.


그리고, 어떤 도메인으로 들어왔을때, 몇번 포트로 보내고 싶었다.


www.test.com 도메인으로 들어오면, 8081 포트로 보내라, 


이렇게 세팅하기 위해서는 역방향 프록시 세팅을 해줘야 한다.


제어판 => 응용프로그램 포털 =>  "역방향 프록시" 탭





으로 가서 생성버튼을 누른다.


그리고 밑에처럼 세팅해준다.





설명 : 알아서 적어준다.


HTTP 


호스트이름 : 내가 쓸 도메인명을 적어준다.

www.test.com


웹서버는 기본 80포트니까, 80포트 세팅해준다.


그리고, 대상은 


호스트 이름에, 내서버의 8122포트로 접속하는거니까, 


localhost 라고 써주고,(아니면 ip를 직접 적어줘도 된다)


원하는포트(도커 콘테이너에서 세팅한 포트) 를 적어준다. 



사진캡쳐가 여러개다보니...포트번호가 좀 왔다갔다 하는데, 


원하는 포트를 적어주면 된다.





참고, 블로그

https://www.clien.net/service/board/cm_nas/10938224


https://tetzzang.com/%EC%97%AD%ED%94%84%EB%A1%9D%EC%8B%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%ED%8F%AC%ED%8A%B8%EB%B2%88%ED%98%B8-%EC%97%86%EC%9D%B4-dsm%EC%97%90-%EC%A0%91%EC%86%8D%ED%95%98%EB%8A%94-%EB%B2%95


위 블로그 보면, https 도 설정하는 법이있다.




**참고로, Web Station 에 등록된 도메인은, 역방향 프록시 에 등록 안된다.

먼저 Web Station에서 가상호스트 목록에서 삭제해준다.





Posted by Tyson
2018. 2. 22. 19:12

먼저 Nginx의 폴더 구조에 대해서 설명하겠다.


/etc/nginx   : 여기는 설정파일들이있음.

/etc/nginx/conf.d  : 기본설정 파일이 들어있음.

/usr/share/nginx/html : 기본 띄우는 html파일폴더

/var/log/nginx : 로그파일들이다.




/etc/nginx/nginx.conf 가 기본 설정 파일임.



여기 안에 보면, 

> vi nginx.conf


include 가 있다.


# For more information on configuration, see:

#   * Official English Documentation: http://nginx.org/en/docs/

#   * Official Russian Documentation: http://nginx.org/ru/docs/


user nginx;

#user root;

worker_processes auto;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;


# Load dynamic modules. See /usr/share/nginx/README.dynamic.

include /usr/share/nginx/modules/*.conf;


events {

    worker_connections  1024;

}



http {

    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;

    tcp_nodelay         on;

    keepalive_timeout   65;

    types_hash_max_size 2048;


    include             /etc/nginx/mime.types;

    default_type        application/octet-stream;


    # Load modular configuration files from the /etc/nginx/conf.d directory.

    # See http://nginx.org/en/docs/ngx_core_module.html#include

    # for more information.

    include /etc/nginx/conf.d/*.conf;

    include /etc/nginx/site-available/*.conf;


}




include /etc/nginx/conf.d/*.conf 

는 conf.d폴더의 .conf로 끝나는 파일은 다 저 자리에 넣는거다.


그래서, 관리하는 사이트 만 밑에처럼 작성해서 test.conf 이런식으로 넣어 놓으면 각 서버 정보가 추가되는거다.




server {

    listen 80;


    server_name test.com;

    root /usr/share/nginx/html;


    location / {

        include /etc/nginx/uwsgi_params;

        proxy_pass http://127.0.0.1:3000;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection 'upgrade';

        proxy_set_header Host $host;

        proxy_cache_bypass $http_upgrade;

    }

}



자, 위에꺼는 80 포트, test.com으로 들어오면, 

로컬호스트 3000포트로 보내라는 건데,


여기서 계속 에러가 뜨는거다..


2018/02/22 09:40:25 [crit] 25667#0: *6 connect() to 127.0.0.1:3000 failed (13: Permission denied) while connecting to upstream, client: 112.111.11.11, server: test.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "test.com"


이런식의 로그가 게속 뜨는거다.


여기서 미치는거다. 권한 문제인가 해서...폴더들 권한 등등 다 넣었는데, 안되는거다.....


아무리 찾아도 없고........


그러다가 방화벽쪽 문제인거 같더라.


SELinux에서 포트포워딩을 막는거 같아서, 




$setsebool httpd_can_network_connect on

위에처럼 해주니까, 바로 프록시포트가 먹힌다.


진짜 이거 찾는데, 엄청 오래 걸렸다!!




<https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx

 여기 참조>


I’ve run into this problem too. Another solution is to toggle the SELinux boolean value for httpd network connect to on (Nginx uses the httpd label).

setsebool httpd_can_network_connect on

To make the change persist use the -P flag.

setsebool httpd_can_network_connect on -P

You can see a list of all available SELinux booleans for httpd using

getsebool -a | grep httpd





Posted by Tyson