原因:普通用户无法开启443端口

在Linux上,使用普通用户启动Nginx并监听443端口可能会失败。这是因为端口号低于1024的端口是受保护的特权端口,只有具有管理员权限的用户才能使用这些端口。

方案一:普通用户能够使用特权端口权限设置(腾讯云部署服务不建议)

  1. 使用高于1024的端口:将Nginx配置文件中的端口号修改为高于1024的端口(例如8443),然后使用普通用户启动Nginx。这样,Nginx就可以在指定的端口上监听HTTPS请求。方法可行,不适用必须使用特权端口情况
  2. 使用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端口)。

  1. 使用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