Openlitespeed 웹서버 설치 및 Nginx 리버스 프록시 서버 설정하기 (1)
컨텐츠 정보
- 13,615 조회
- 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 비번까지 수동으로 설정 가능하니 참조하시구요.
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 플러그인 설정을 다뤄보겠습니다.
-
등록일 2020.10.10그누보드 SMTP 외부메일 설정하는 방법댓글 26
-
등록일 2020.10.03그누보드5에 실시간 채팅 구축하기댓글 13
-
등록일 2020.09.26
-
등록일 2020.09.24도커로 메일서버 구축하기댓글 4
관련자료
-
서명우성짱의 NAS를 운영하고 있습니다.
저의 즐거움이 여러분의 즐거움이면 좋겠습니다.