작업실

Openlitespeed 웹서버 설치 및 Nginx 리버스 프록시 서버 설정하기 (1)

컨텐츠 정보

  • 14,024 조회
  • 36 댓글
  • 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 비번까지 수동으로 설정 가능하니 참조하시구요.



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



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 플러그인 설정을 다뤄보겠습니다.

관련자료

  • 서명
    우성짱의 NAS를 운영하고 있습니다.

    저의 즐거움이 여러분의 즐거움이면 좋겠습니다.

댓글 36 / 4 페이지

djkiller님의 댓글의 댓글

네 쪽지 확인했습니다.

https://www.wsgvet.com/home/639?#c_779

요거 보고 따라하는데 오류가 났는데 확인 해주실수 있으신가요?

김캐시님의 댓글

우성님 블로그 눈팅만하다 가입해서 댓글을 달아봅니다. 아파치 서버에 올라간 워드프레스를 OLS로 옮길려고 하는데요. 우성님께서 지금 다시 워드프레스 세팅하신다고해도 지금 OLS+nginx 리버스 프록시 세팅으로 하실건지.. 아니면 지금은 생각이 바뀌셨는지 궁금해서 여쭤봅니다.

우성짱님의 댓글의 댓글

이건 사실 실험작이라고 볼 수 있습니다. 다시 한다면 전 그냥 Nginx로만 운영할 듯 합니다. 편해서요 ㅎㅎ

김캐시님의 댓글의 댓글

댓글주셔서 감사합니다! OLS+LS캐시+워프가 확실히 속도면에서는 아파치나 nginx보다는 좋으셨나요? 메인 블로그를 옮기려니 조금 걱정이앞서서 한번 더 여쭤봅니다.(지금 아파치에 올라가있어요)

우성짱님의 댓글의 댓글

아무래도 제대로 캐시를 이용하다보니 속도 부분에서는 앞섰던 것으로 기억합니다. 테스트로 한번 셋팅해보시고 메인 블로그 이전을 고려해보시는 것이 좋을 것 같습니다!
전체 157 / 3 페이지
RSS

최근글


새댓글


알림 0