配置文件位于 /etc/nginx/sites-enabled
下,名为 default
。
用 Nginx 做端口转发(反向代理)
将域名转发到本地端口
首先介绍最常用的,将域名转发到本地另一个端口上
server{
listen 80;
server_name example.com;
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 转发规则
proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 example.com 时就会转发到本地的 8080 端口
将域名转发到另一个域名
server{
listen 80;
server_name example.com;
index index.php index.html index.htm;
location / {
proxy_pass http://www.baidu.com;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 http://example.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名
server{
listen 80;
server_name 127.0.0.1; # 公网ip
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
加 / 与不加 /
在配置 proxy_pass 代理转发时,如果后面的 url 加 / ,表示绝对根路径;如果没有 / ,表示相对路径
例如
- 加 /
server_name example.com
location /data/ {
proxy_pass http://127.0.0.1/;
}
访问 http://example.com/data/index.html 会转发到 http://127.0.0.1/index.html
- 不加 /
server_name example.com
location /data/ {
proxy_pass http://127.0.0.1;
}
访问 http://example.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
使用 Nginx 根据不同域名转发到不同端口
假如在同一台服务器上部署了 2 个 server,分别对应 8080 , 8081 端口,并用 2 个不同的域名分别对应这两个端口,我们可以使用 nginx 的转发动态请求到不同端口的应用上
www.a.net 需要请求到 8080 端口的应用
server {
listen 80;
server_name www.a.net;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
www.a.cn 需要请求到 8081 端口的应用
server {
listen 80;
server_name www.a.cn;
location / {
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
}
2、检查配置,并重新加载配置
# 检查配置文件语法是否正确
nginx -t
#重新加载配置
nginx -s reload
3、将 http://www.a.net 和 http://www.a.cn 域名都配置到当前这台服务器的对外 ip 上,这样我们就可以通过访问不同的地址来实现不同端口的访问了
Nginx 服务器 SSL 证书安装部署
操作场景
本文档指导您如何在 Nginx 服务器中安装 SSL 证书。
说明:
- 本文档以证书名称
cloud.tencent.com
为例。- Nginx 版本以
nginx/1.18.0
为例。- 当前服务器的操作系统为 CentOS 7,由于操作系统的版本不同,详细操作步骤略有区别。
- 安装 SSL 证书前,请您在 Nginx 服务器上开启 HTTPS 默认端口
443
,避免证书安装后无法启用 HTTPS。
操作步骤
证书安装
-
请在 SSL 证书管理控制台 中选择您需要安装的证书并单击下载。
-
在弹出的 “证书下载” 窗口中,服务器类型选择 Nginx,单击下载并解压缩
cloud.tencent.com
证书文件包到本地目录。
解压缩后,可获得相关类型的证书文件。其中包含cloud.tencent.com_nginx
文件夹:- 文件夹名称:
cloud.tencent.com_nginx
-
文件夹内容:
cloud.tencent.com_bundle.crt
证书文件cloud.tencent.com_bundle.pem
证书文件(可忽略该文件)cloud.tencent.com.key
私钥文件-
cloud.tencent.com.csr
CSR 文件说明:
CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。
- 文件夹名称:
-
使用 “WinSCP”(即本地与远程计算机间的复制文件工具)登录 Nginx 服务器。
-
将已获取到的
cloud.tencent.com_bundle.crt
证书文件和cloud.tencent.com.key
私钥文件从本地目录拷贝到 Nginx 服务器的/usr/local/nginx/conf
目录(此处为 Nginx 默认安装目录,请根据实际情况操作)下。 -
远程登录 Nginx 服务器。
-
编辑 Nginx 配置文件。修改内容如下:
说明:
- 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用listen 443 ssl
代替listen 443
和ssl on
。
server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name cloud.tencent.com; #请填写证书文件的相对路径或绝对路径 ssl_certificate cloud.tencent.com_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key cloud.tencent.com.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。 root html; index index.html index.htm; } }
- 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
-
通过执行以下命令验证配置文件问题。
nginx -t
- 若存在,请您重新配置或者根据提示修改存在问题。
- 若不存在,请执行步骤 8 。
-
通过执行以下命令重载 Nginx。
nginx -s reload
-
重载成功,即可使用
https://cloud.tencent.com
进行访问。
HTTP 自动跳转 HTTPS 的安全配置(可选)
如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置:
-
根据实际需求,选择以下配置方式:
- 在页面中添加 JS 脚本。
- 在后端程序中添加重定向。
- 通过 Web 服务器实现跳转。
-
Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加
return 301 https://$host$request_uri;
,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:说明:
- 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用listen 443 ssl
代替listen 443
和ssl on
。
server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name cloud.tencent.com; #请填写证书文件的相对路径或绝对路径 ssl_certificate cloud.tencent.com_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key cloud.tencent.com.key; ssl_session_timeout 5m; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。 root html; index index.html index.htm; } } server { listen 80; #请填写绑定证书的域名 server_name cloud.tencent.com; #把http的域名请求转成https return 301 https://$host$request_uri; }
注意:
- 监听 443 端口必须映射到 https 地址,否则 Nginx 会报 Http 400 Bad Request "The plain HTTP request was sent to HTTPS port"
- 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
-
通过执行以下命令验证配置文件问题。
nginx -t
- 若存在,请您重新配置或者根据提示修改存在问题。
- 若不存在,请执行步骤 3 。
-
通过执行以下命令重载 Nginx。
nginx -s reload
-
重载成功,即可使用
https://cloud.tencent.com
进行访问。
Comments NOTHING