Tip lấy chứng chỉ SSL từ Let’s Encrypt mà không cần tắt Nginx hoặc Apache

Để cài đặt chứng chỉ Let’s Encrypt SSL trên server thì bạn có thể sử dụng nhiều cách.

Bạn có thể sử dụng certbot hoặc lego để cài đặt chứng chỉ.

Đa số các ACME client này sẽ cần sử dụng port 80 hoặc 443 để thực hiện xác thực để lấy chứng chỉ.

Và sẽ thường yêu cầu bạn tắt Apache hoặc Nginx. Bằng lệnh service nginx stop hoặc service apache2 stop.

Tuy nhiên mình có một tip nhỏ để bạn thực hiện lấy chứng chỉ ssl hoặc renew chứng chỉ ssl mà không cần phải tắt nginx hoặc apache.

Cài đặt htop trên CentOS 8

1
2
3
sudo yum -y install epel-release
sudo yum repolist
sudo yum install htop -y

Done!

Cài đặt FFMpeg trên CentOS 7, CentOS 8

Note lại các bước cài đặt FFMpeg trên CentOS để dùng lại sau này.

Cài đặt Let’s Encrypt SSL trên linux

Trước khi làm theo hướng dẫn, bạn cần lưu ý các vấn đề sau:

  • Tên miền phải được trỏ đến IP của server đang cài đặt.
  • Mặc định Certbot yêu cầu quyền root để truy cập và ghi dữ liệu vào: /etc/letsencrypt, /var/log/letsencrypt, /var/lib/letsencrypt.
  • Ngoài ra, port 80 sẽ được sử dụng trong quá trình xác nhận tên miền để cấp chứng chỉ SSL. Do đó, nếu bạn đang chạy nginx hoặc apache thì cần phải tắt đi trước khi thực hiện.

Cài đặt vào giám sát Laravel Queue sử dụng PM2

Trong hầu hết các trường hợp, bạn sẽ thường sử dụng supervisor.d hoặc một số trình giám sát khác để chạy Laravel Queue.

Trong bài này, tôi sẽ hướng dẫn thêm một cách khác là dùng pm2 để chạy và giám sát Laravel Queue.

Nginx reverse proxy wss with ssl

Overview

WebSockets allow a two-way, persistent communication channel between a client and a server. Like any other HTTP requests, WebSockets can be either secure (WSS) or insecure (WS). In This tutorial, you will be shown how to configure NGINX to proxy WSS connections.

Getting Started

If you are not a developer or have not developed a WebSocket application, you may find demo applications in Github. Each one was written for tutorials like this.

  • NodeJS Express
  • Python

Source: https://www.serverlab.ca/tutorials/linux/web-servers-linux/how-to-proxy-wss-websockets-with-nginx/

Configuring Secure WebSocket Proxy

In order for WWS requests to be proxied to a backend WSS service, NGINX must be configured to listen over a secure port. Just as you would configure SSL when using NGINX to server web application, a ssl certificate and certificate key must be configured.

The following example nginx.conf adds uses a certificate file named cert.pem and a key file named key.pem. The acceptabed protocols are explicitly set using the ssl_protocols directive, and the allowed ciphers are set with the ssl_ciphers directive.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
server {
listen 443 ssl;

server_name xxx.xx.io

ssl on;
ssl_certificate /etc/asterisk/certs/xxx.io.pem;
ssl_certificate_key /etc/asterisk/certs/xxx.io.key;

ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

#prevent 502 bad gateway
#large_client_header_buffers 8 32;

location / {

# prevents 502 bad gateway error
proxy_buffers 8 32k;
proxy_buffer_size 64k;

# redirect all HTTP traffic to localhost:8088;
proxy_pass http://0.0.0.0:8088/ws;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-NginX-Proxy true;

# enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_read_timeout 999999999;

}
}

Source: https://gist.github.com/steve-ng/ed6de1fa702ef70bd6ce

Node.js server only listening on ipv6

You need to specify an IPV4 address when you call the listen(), I had the same issue with the http module. If I use this:

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, function() { });

It only listen on IPV6, as you can see from netstat output:

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State
tcp6        0       0  :::13882       :::*             LISTEN

However, if I specify an IPV4 address like this:

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, "0.0.0.0", function() { });

netstat will report the server as listening on IPV4:

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address     Foreign Address  State
tcp         0       0  0 0.0.0.0:13882   0 0.0.0.0:13882  LISTEN

I’m using Ubuntu 16.04 and npm 5.3.0.

HTH

Source: https://stackoverflow.com/a/48170565/4353123

(13: Permission denied) while connecting to upstream:[nginx]

I had a similar issue getting Fedora 20, Nginx, Node.js, and Ghost (blog) to work. It turns out my issue was due to SELinux.

This should solve the problem:

setsebool -P httpd_can_network_connect 1

Details

I checked for errors in the SELinux logs:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

And found that running the following commands fixed my issue:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

References:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux

Source: https://stackoverflow.com/a/24830777/4353123

How can I get mv (or the * wildcard) to move hidden files?

You can do this :

shopt -s dotglob
mv /tmp/home/rcook/* /home/rcook/

You can put

shopt -s dotglob

in your ~/.bashrc if you want it to be the default.

See http://mywiki.wooledge.org/glob


Another approach to copy the dot files:

mv /tmp/home/rcook/.[!.]* /home/rcook/

Don’t use the pattern ..* as it matches .. (pointer to the parent directory). If there are files whose name begin with two dots (..something), also use the pattern ..?*.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×