原因:普通用户无法开启443端口
在Linux上,使用普通用户启动Nginx并监听443端口可能会失败。这是因为端口号低于1024的端口是受保护的特权端口,只有具有管理员权限的用户才能使用这些端口。
方案一:普通用户能够使用特权端口权限设置(腾讯云部署服务不建议)
- 使用高于1024的端口:将Nginx配置文件中的端口号修改为高于1024的端口(例如8443),然后使用普通用户启动Nginx。这样,Nginx就可以在指定的端口上监听HTTPS请求。
方法可行,不适用必须使用特权端口情况
- 使用iptables端口转发:您可以使用iptables工具设置端口转发规则,将外部的443端口转发到Nginx运行的高于1024的端口上。
腾讯云服务使用失败,需要先安装iptables,本地虚拟机预计可行
以下是一个示例命令:
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
上述命令将来自443端口的请求重定向到8443端口(Nginx配置的HTTPS端口)。
- 使用
setcap
命令:使用setcap命令可以为Nginx程序授予特权,允许它以普通用户身份绑定低于1024的端口。同样腾讯云服务器失败
以下是一个示例命令:
sudo setcap 'cap_net_bind_service=+ep' /nginx/nginx
上述命令将cap_net_bind_service能力授予Nginx可执行文件,使其能够绑定低于1024的端口。
请注意,使用以上方法需要谨慎操作,并确保您有足够的权限有root用户用root用户,没有需要有权限的给普通用户添加sudou权限
进行相关配置。另外,使用真实的受信任SSL证书也是建议的,以确保通信的安全性。
方案二 使用root用户安装nginx
注意安装nginx时配置包含SSL模块
yum install openssl-devel gcc
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar -xzvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/nginx/nginx --with-http_ssl_module
make
make install
nginx -v
如果SSL模块成功包含,输出将显示–with-http_ssl_module
。
nginx.conf 添加参数:
server {
#SSL 访问端口号为 443
listen 443 ssl;
server_name mydomin.top;
#证书文件名称
ssl_certificate /root/nginx/conf/mydomin.top_bundle.crt;
#私钥文件名称
ssl_certificate_key /root/nginx/conf/mydomin.top.key;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 20M;
location / {
proxy_pass http://11.32.115.36:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启动nginx后查看端口是否启动成功:
netstat -nltp|grep 443