오픈라이트스피드 웹서버 설치 및 Nginx 리버스 프록시 서버 설정하기 (1)

작업실

오픈라이트스피드 웹서버 설치 및 Nginx 리버스 프록시 서버 설정하기 (1)

우성군 2 178 1

1. 들어가며


오픈라이트웹서버(이하 ols)는 워드프레스에 특화된 웹서버라고 보시면 됩니다. LSCACHE라는 워드프레스 캐시 플러그인이 있는데, ols에서만 활성화되는 옵션이 정말 좋습니다. WP Rocket이나 Swift Performance의 유료 기능들을 대부분 무료로 사용할 수 있습니다.


특히 Generate Critical CSS per page는 워드프레스 최적화 무료 플러그인 Autoptimize 에서도 월 $7이나 받는 대단히 좋은 기능인데요.


이게 뭐냐면 웹페이지 첫 접속할 때 보여지는 화면의 틀을 잡는 CSS만 미리 뿌려주는 것인데요. 이걸 설정하면 초기 접속 속도가 월등하게 빨라집니다.


https://wpspeedmatters.com/best-wordpress-cache-plugins


위 링크는 워드프레스 플러그인 비교입니다. 자세한 내용은 위 링크 참조하시구요. 솔직히 ols 깔고 LSCACHE만 써도 속도에 큰 불만없이 쓸 수 있습니다.


하지만 Nginx를 주력으로 쓰고 있는 저에게는 ols를 메인으로 쓰기엔 아직 어려운 부분이 많은데요.


기존 Nginx의 프록시 캐시나, FastCGI 캐시 같은 설정은 또 Nginx 고유의 기능이기 때문입니다.


그래서 Nginx의 프록시 캐시와 ols의 LSCACHE를 같이 쓰면 어떨까? 라는 생각이 들었습니다.


그 설정을 마무리하고 여러분에게도 알려드리기 위해 이 글을 작성해봅니다.



2. 오픈라이트스피드 웹서버 설치


원클릭으로 오픈라이트스피드 웹서버와 lsphp7.4와 MariaDB 10.4, 워드프레스까지 한방에 설치합니다.


프론트는 Nginx를 쓸 것이기 때문에 오픈라이트스피드 웹서버는 http는 81, https는 442로 설정합니다.


프론트를 Nginx로 안쓰고 그냥 오픈라이트스피드 웹서버만 쓰시려면 그냥 쓰셔도 됩니다. ㅎㅎ


https://github.com/litespeedtech/ols1clk


위에 소스가 있습니다. 여러가지 설정을 원클릭으로 가능한데요.


포트와 워드프레스 설치 폴더만 지정할 것입니다. DB 유저와 DB 비번, admin 비번까지 수동으로 설정 가능하니 참조하시구요.



wget --no-check-certificate https://raw.githubusercontent.com/litespeedtech/ols1clk/master/ols1clk.sh

위 명령어로 원클릭 스크립트를 다운받습니다.


sudo bash ols1clk.sh --wordpresspath /var/www/wordpress --listenport 81 --ssllistenport 442


위 명령어를 내리면


**********************************************************************************************

*                    Open LiteSpeed One click installation, Version 2.2                      *

*                    Copyright (C) 2016 - 2020 LiteSpeed Technologies, Inc.                  *

**********************************************************************************************

Current platform is UBUNTU20 ubuntu focal.


Starting to install OpenLiteSpeed to /usr/local/lsws/ with the parameters below,

WebAdmin password:        xxxxxxxxxx

WebAdmin email:           root@localhost

LSPHP version:            74

MariaDB version:          10.4

Install WordPress:        Yes

WordPress HTTP port:      81

WordPress HTTPS port:     442

Web site domain:          *

MySQL root Password:      xxxxxxxxxx

Database name:            olsdbname

Database username:        olsdbuser

Database password:        xxxxxxxxxx

WordPress plus:           No

WordPress location:       /var/www/wordpress (New install)


Are these settings correct? Type n to quit, otherwise will continue.[Y/n]

위와 같이 내용이 나옵니다. 셋팅한 값 이외에는 전부 자동으로 잡아줍니다.


비밀번호들이 있으니까 위 내용을 미리 복사해두시구요.


그 후 Y 엔터를 누르면 알아서 설치를 다 합니다.


대략 6~7분이면 설치가 끝납니다.


Finished setting up WordPress.

Finished MySQL setup without error.

[OK] litespeed: pid=9943.

Please be aware that your password was written to file '/usr/local/lsws/password'.

Congratulations! Installation finished.

Please access http://localhost:81/ to finish setting up your WordPress site.

And also you may want to activate the LiteSpeed Cache plugin to get better performance.


Testing ...

OK: test webAdmin page passed.

OK: test Example vhost page passed.

OK: test wordpress HTTP first page passed.

OK: test wordpress HTTPS first page passed.


If you run into any problems, they can sometimes be fixed by running with the --purgeall flag and reinstalling.

If you have an existing certificate and private key for your site, you will need to replace the example.key and example.crt in /usr/local/lsws/conf with these files.

Thanks for using "OpenLiteSpeed One click installation".

Enjoy!

위와 같이 나오면 설치 성공입니다.


sudo apt install lsphp74-imagick


위 명령어로 워드프레스에 필요한 패키지를 설치합니다.



3. Redis-server 설치


Redis-server는 메모리를 쓸 수 있는 프로그램으로써, 캐시를 램에 저장한 뒤에 꺼내쓸 수 있는 기능으로 활용할 수 있습니다. 램에서 꺼내쓰면 속도가 더 빨라지겠죠? ^^


memcached와 redis 동시에 설치가 가능하지만, redis만 설치합니다. 어짜피 memcached는 안쓰더라구요. ㅎㅎ


sudo apt install redis-server


위 명령어로 레디스 서버를 설치합니다.


sudo systemctl enable redis-server.service


위 명령어로 레디스 서버를 재부팅시에도 실행되게 합니다.


sudo nano /etc/redis/redis.conf


위와 같이 레디스 설정에 들어갑니다.


maxmemory 256mb

maxmemory-policy allkeys-lru

위 2부분을 주석을 해제하고 수정을 해줍니다.


컨트롤 + O, 엔터, 컨트롤 + X로 저장 후 빠져나옵니다.


sudo systemctl restart redis-server.service


위 명령어로 재실행 해줍니다.


sudo apt install lsphp74-redis


위 명령어로 lsphp74와 연결해주는 패키지를 설치합니다. lsphp74과 자동으로 붙습니다.


killall lsphp


위 명령어로 lsphp 를 재시작 해줍니다.



4. Nginx와 php7.4 설치


sudo apt update


sudo apt install nginx


sudo systemctl stop nginx.service


sudo systemctl start nginx.service


sudo systemctl enable nginx.service


위 명령어로 패키지 업데이트, Nginx 설치, Nginx 시작 프로그램 등록이 완료됩니다.


sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip


위 명령어로 php7.4 패키지를 설치해줍니다.


sudo nano /etc/php/7.4/fpm/php.ini


위 명령어로 php7.4의 설정을 수정합니다.


file_uploads = On

allow_url_fopen = On

short_open_tag = On

memory_limit = 256M

cgi.fix_pathinfo = 0

upload_max_filesize = 100M

post_max_size = 101M

max_execution_time = 360

date.timezone = Asia/Seoul

위와 같은 내용을 찾아서 수정해줍니다.


컨트롤 + O, 엔터, 컨트롤 + X를 누르면 저장 후 빠져나옵니다.


sudo systemctl reload php7.4-fpm


위 명령어로 설정을 적용해줍니다.


sudo apt install libnginx-mod-http-cache-purge


Nginx의 cache를 제거할 수 있는 패키지를 설치합니다.


워드프레스에서 Nginx Helper 플러그인의 핵심 패키지입니다.



5. Nginx와 php7.4 유저와 그룹을 수정하기


ols의 유저와 그룹이 nobody, nogroup 이기 때문에 똑같이 맞춰줘야 합니다.


이 작업을 하지 않으면 cache를 제거할 수 없습니다.


sudo nano /etc/nginx/nginx.conf


위 명령어로 Nginx 설정에 들어갑니다.


#user www-data;

user nobody nogroup;

위와 같이 www-data를 # 처리하고 노바디 노그룹을 넣어줍니다.


컨트롤 + O, 엔터, 컨트롤 + X를 누르면 저장 후 빠져나옵니다.


sudo systemctl restart nginx.service


위 명령어로 Nginx를 재시작해줍니다.


sudo nano /etc/php/7.4/fpm/pool.d/www.conf 

위 명령어로 php7.4 설정에 들어갑니다.


user = nobody

group = nogroup


listen.owner = nobody

listen.group = nogroup

위 4줄을 찾아서 바꿔줍니다.


컨트롤 + O, 엔터, 컨트롤 + X를 누르면 저장 후 빠져나옵니다.


sudo systemctl restart php7.4-fpm


위 명령어로 설정을 적용해줍니다.



6. let's encrypt 와일드카드 SSL 인증서 발급받기


클라우드플레어 가입 및 네임서버 변경하기


https://blog.wsgvet.com/cloudflare-sign-in-and-change-nameserver/



구글 클라우드 가입 및 클라우드플레어와 도메인 연결하기


https://blog.wsgvet.com/sign-in-google-cloud-platform-and-connect-domain-and-hello-world/ 



레츠인크립트 와일드카드 인증서 받기


https://blog.wsgvet.com/letsencrypt-wildcard-certification-issue-and-mariadb-install


위 링크들을 따라하시면 와일드카드 인증서를 무료로! 받을 수 있습니다.


여기서 풀체인과 프라이빗키의 위치를 정확하게 알고 있어야 합니다.


나중에 ols admin에 들어가서 꼭 설정을 해줘야 합니다.


제 테스트 홈페이지 기준으로 


/etc/letsencrypt/live/hubs.tk/fullchain.pem


위 경로가 풀체인 경로


/etc/letsencrypt/live/hubs.tk/chain.pem


위 경로가 체인 경로


/etc/letsencrypt/live/hubs.tk/privkey.pem


위 경로가 프라이빗키 경로입니다.


자신의 경로를 꼭 적어두세요.



7. Nginx 설정하기


ols에서는 이미 워드프레스와 연결되었습니다.


이제 Nginx에서 리버스 프록시로 ols와 연결할 차례입니다.


sudo nano /etc/nginx/snippets/wp-ssl.conf


먼저 SSL 관련 설정파일을 따로 만듭니다.



ssl_certificate /etc/letsencrypt/live/yoursitename.com/fullchain.pem; # 이 경로도 인증서 만들때 중요했던, 그 경로로 바꾸세요.

ssl_certificate_key /etc/letsencrypt/live/yoursitename.com/privkey.pem; # 이 경로도 인증서 만들때 중요했던, 그 경로로 바꾸세요.

ssl_trusted_certificate /etc/letsencrypt/live/yoursitename.com/chain.pem;  # 이 경로도 인증서 만들때 중요했던, 그 경로로 바꾸세요.


ssl_dhparam snippets/dhparams.pem;

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 1d;

ssl_session_tickets off;


ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;

ssl_stapling on;

ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=300s;

resolver_timeout 10s;


ssl_protocols TLSv1.2 TLSv1.3;

ssl_prefer_server_ciphers off;

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

제일 윗 부분에 6번에서 만들었던 인증서의 경로를 꼭 수정해줍니다.


다 바꾼 후 컨트롤 + O, 엔터, 컨트롤 + X 엔터를 누르면 저장 후 빠져나옵니다.


sudo openssl dhparam -out /etc/nginx/snippets/dhparams.pem 2048


위 명령어로 dhparams.pem 파일을 생성합니다.


대략 10~20초면 생성이 됩니다.


sudo nano /etc/nginx/sites-available/proxy-cache


위 명령어로 Nginx 전체의 프록시캐시 경로 및 기본 설정 파일을 만듭니다.


proxy_cache_path /run/nginx-cache levels=1:2 keys_zone=proxy-cache:100m max_size=1g inactive=600m use_temp_path=off;

proxy_cache_key "$scheme$request_method$host$request_uri";

위 내용을 그대로 넣고 컨트롤 + O, 엔터, 컨트롤 + X로 저장 후 빠져나옵니다.


캐시 파일은 /run/nginx-cache 라는 경로에 램에 저장됩니다.


sudo nano /etc/nginx/sites-available/wpols-proxycache


위 명령어로 Nginx의 리버스프록시캐시 설정을 합니다.


server {

    listen 80;

    listen [::]:80;

    server_name yoursitename.com www.yoursitename.com; #자신의 도메인 주소로 바꾸세요.

    location / {

        rewrite       ^/(.*)$ https://yoursitename.com/$1 permanent; #자신의 도메인 주소로 바꾸세요.

}


server {

listen 443 ssl http2;

listen [::]:443 ssl http2;

server_tokens off;

client_max_body_size 100M;

include snippets/wp-ssl.conf;

server_name hubs.tk; #자신의 도메인주소로 바꾸세요.

if ($host != 'hubs.tk' ) { #자신의 도메인 주소로 바꾸세요.

rewrite ^/(.*)$  https://yoursitename.com/$1 permanent; # 자신의 도메인 주소로 바꾸세요.

}

access_log /var/log/nginx/proxy-access.log;

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

    

set $skip_cache 0;


# POST requests and urls with a query string should always go to PHP

if ($request_method = POST) {

    set $skip_cache 1;

}

#if ($query_string != "") {

#    set $skip_cache 1;

#}


# Don't cache uris containing the following segments

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {

    set $skip_cache 1;

}


# Don't use the cache for logged in users or recent commenters

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {

    set $skip_cache 1;

}


#if ($remote_addr ~* "12.34.56.78|12.34.56.79") { #캐시 생성을 차단하는 IP 설정입니다.

#     set $skip_cache 1;

#}


location / {

# comment out proxy_redirect if get login redirect loop

#proxy_redirect off;

proxy_cache proxy-cache;


proxy_cache_bypass $skip_cache;

proxy_no_cache $skip_cache;


proxy_cache_valid 200 301 302 600m;

proxy_cache_use_stale error timeout updating invalid_header http_500 http_503;

proxy_cache_min_uses 1; # 해당 파일에 처음 접근하자마자 바로 캐시 생성

proxy_cache_lock on;

add_header X-Frame-Options SAMEORIGIN;

add_header X-Content-Type-Options nosniff;

add_header X-XSS-Protection "1; mode=block";     

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

add_header X-WP-Cache-Status $upstream_cache_status;


# pass requests to the origin backend 

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_pass http://127.0.0.1:81;

}


location ~ /purge(/.*) {

proxy_cache_purge proxy-cache "$scheme$request_method$host$1";

}

}

위 설정을 대략 설명드리면, http로 들어온 것 https로 처리, www 붙은 것 www 제거하기, 캐시 설정, 캐시 삭제 설정 등입니다.


https://www.linuxbabe.com/nginx/setup-nginx-fastcgi-cache


상세한 내용은 위 링크를 참조하세요.


서버 주소 부분을 전부 수정하셔야 합니다. 수정을 다 한 뒤에 컨트롤 + O, 엔터, 컨트롤 + X로 저장 후 빠져나옵니다.



이제 관리자 모드로 들어가는 설정을 추가해줍니다.


원래 7080 포트로 들어가면 되는데, 그럴 경우 인증서 오류 및 방화벽 설정을 귀찮게 해야됩니다. 


그래서 리버스프록시로 처리하면 방화벽도 안열어도 되고 보안에 좋습니다.


sudo nano /etc/nginx/sites-available/ols-admin


위 명령어로 설정에 들어갑니다.


server {

listen 80;

listen [::]:80;

server_name admin.yoursitename.com;  #자신의 주소로 바꾸세요.

location / {

rewrite       ^/(.*)$ https://admin.yoursitename.com/$1 permanent; #자신의 주소로 바꾸세요.

}


server {


listen 443 ssl http2;

listen [::]:443 ssl http2;

server_tokens off;

client_max_body_size 100M;

include snippets/wp-ssl.conf;


#IP 차단 부분입니다. 밑의 내용을 수정 후 앞에 #을 빼면 IP차단이 적용됩니다.

#allow xxx.xxx.xxx.xxx; #자신의 집 컴퓨터의 외부IP를 확인 후 넣고 앞에 #을 제거하면 됩니다.

#allow 192.168.1.1; # 자신의 컴퓨터에 설치했다면 이것도 추가합니다. 추가 후 #을 제거

#deny all; # 위 아이피 이외에 모든 IP를 차단합니다. 


server_name admin.yoursitename.com; #자신의 주소로 바꾸세요.


location / {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_pass https://127.0.0.1:7080;

}

}


위 내용을 넣고 반드시 자신의 도메인 주소로 바꾼 후 컨트롤 + O, 엔터, 컨트롤 + X로 저장 후 빠져나옵니다.


sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proxy-cache /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/wpols-proxycache /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/ols-admin /etc/nginx/sites-enabled/


위 내용으로 이제 Nginx에 방금 넣었던 내용을 적용하게 됩니다.


sudo nginx -t


위 명령어로 설정에 이상이 없는지 확인합니다.


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

위 내용이 나온다면 성공한 것입니다.


sudo service nginx restart


위 명령어로 nginx를 재시작해줍니다.


이제 서버쪽 설정은 모두 끝났습니다!



8. 오픈라이트 웹서버 관리자 접속 및 설정하기


하지만 아쉽게도 lsphp가 7.3으로 설정되어 있습니다.


7.3과 7.4가 같이 설치된 것 같네요 ㅠㅠ


그래서 관리자에서 7.4로 수정해줘야 됩니다.


이제 아까 설정했던 관리자 주소로 들어갑니다.


admin.자신의주소 이런 식으로 서브 도메인을 넣어줬습니다.


접속하면 잘 나올겁니다.


유저네임에 admin을 넣고


비번은 제일 처음 원클릭 설치할 때 자동 생성된 비번을 넣습니다.


접속이 되면 먼저 lsphp74로 적용해줍니다.


Server Configuration > External App > LiteSpeed SAPI App 에서 오른쪽에 액션에 보면 가운데 수정 버튼이 있습니다.


그걸 누른 후 가운데에 보면 Command 가 있는데 lsphp73/bin/lsphp 에서 lsphp74/bin/lsphp 로 바꿔줍니다.


저장 후 위에 LSWS PID 오른쪽에 새로고침 버튼을 누르면 적용됩니다.


다음 글에서 좀더 상세한 관리자모드 설정 및 캐시 작업, LSCACHE 설정, LSCACHE 플러그인 설정을 다뤄보겠습니다.

, , ,

2 Comments
Computist 06.22 14:33  
감사합니다~~
우성군 06.22 16:06  
[@Computist] 저도 감사합니다. ㅎㅎ