使用SSL设置NGINX反向代理主要有三步:准备工作、Nginx配置、测试Nginx配置。
nginx是一个强大的工具。 它允许您为多个应用程序,网站,负载平衡应用提供服务等等。 这种灵活性全部由相对简单的配置系统提供支持,该系统使用几乎是人类可读的配置文件。 本指南将演示如何使用SSL设置NGINX反向代理。
准备工作
本指南将对通过命令行使用基于Linux的系统的一般性了解,并进一步假设以下先决条件:
- Ubuntu 18.04
- 非root用户
- 应用程序在所需的反向代理端口上运行(本指南将使用端口3000)
- 所需域名的DNS A名称记录
- 域的SSL证书
Nginx配置
Nginx-full软件包默认为动态共享虚拟主机环境。 每个虚拟主机的配置文件都可以在这里使用:
/etc/nginx/sites-available/
此位置将有一个名为 默认 可用作基本模板。 但是,我们将在本指南中手动创建一个新的配置文件并根据需要填充它。 登录为非root用户身份时,发出此命令以启动该过程:
sudo touch /etc/nginx/sites-available/domain.tld
请务必更换 Domain-TLD. 与您实际使用的域。
接下来,我们移动修改该文件以执行我们需要执行的任务。 我们将使用 vim 在本指南中为文本编辑器。 您可以使用 纳米 或根据您的个人喜好使用任何其他文本编辑器。
sudo vim /etc/nginx/sites-available/domain.tld
既然文件存在将以下文本添加到此文件中。 修改指示为引用域的文本,您的应用程序使用的端口以及SSL证书路径。 此文件将是反向代理的主要配置:
###
# This Section listens on port 80 for your domain and rewrites the request
# to HTTPS for us
###
server {
listen 80;
server_name domain.tld www.domain.tld; # Edit this to your domain name
rewrite ^ https://$host$request_uri permanent;
}
###
# This is all the configuration declarations that help SSL Function.
###
server {
listen 443 ssl;
server_name domain.tld;
# Edit this to your domain name
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
# If you use Lets Encrypt, you should just need to change the domain.
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
# If you use Let's Encrypt, you should just need to change the domain.
ssl_session_cache builtin:1000 shared:SSL:10m;
# Defining option to share SSL Connection with Passed Proxy
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Defining used protocol versions.
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
# Defining ciphers to use.
ssl_prefer_server_ciphers on;
# Enabling ciphers
access_log /var/log/nginx/access.log;
# Log Location. Can be anywhere. Make sure the nginx user defined in /etc/nginx/nginx.conf has r/w permissions
###
# This is the juicey part of the config file, handing off relevant data to
# our back-end app running on port 3000
# Nothing should need to be changed here, unless port 3000 is not the port
# you're using.
# Furthermore, if you're using a socket to serve your app (PHP comes to
# mind), you can define a unix:.sock location here as well
###
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:3000;
proxy_read_timeout 90;
}
}
保存文件并退出文本编辑器。
测试Nginx配置
现在已经创建了配置,我们必须告诉Nginx检查加载的文件。 我们将建立一个符号链接:
sudo ln -s /etc/nginx/sites-avaialable/domain.tld /etc/nginx/sites-enabled/domain.tld.conf
接下来,我们在重新启动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
我们现在知道配置文件不会导致崩溃,因此让我们重新启动nginx服务并测试应用程序。
sudo systemctl restart nginx
您现在应该通过浏览到定义的端口上运行的应用程序访问 Domain-TLD. 如先前创建的Nginx配置文件中所述。