04 Nginx配置SSL及多个网站

nginx确实具备很大的灵活性,只需要专注于其配置文件即可完成所有的网站设置。

一、配置SSL网站

如何申请SSL不再赘述。SSL申请成功后,下载pem、key文件,并使用Winscp上传到服务器任意目录,例如:/root/ssl/WEBSITE。

可以使用Winscp编辑配置文件(位于/etc/nginx/sites-enabled),非常方便:

server {
	listen 443 ssl;
	server_name WEBSITE;
	ssl_certificate /root/ssl/WEBSITE/site.pem;
	ssl_certificate_key /root/ssl/WEBSITE/site.key;
	root /var/www/WEBSITE;
	index index.php;
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php8.1-fpm.sock;
	}
	location / {
		try_files $uri $uri/ =404;
	}
}

以上配置包含了php8.1支持,此例中,网站的主目录位于:/var/www/WEBSITE。

二、http跳转https

为了实现http向https的转换,有两种方式,一种是用rewite:

server {
	listen 80;
	server_name WEBSITE;
        rewrite ^(.*)$ https://$host$1 permanent;
}

另一种是用return:

server {
	listen 80;
	server_name WEBSITE;
        return 301 https://$host$request_uri;
}

直接把server块加在后面即可,确实非常清晰简单。

三、添加多个网站

nginx天生设计为支持多个网站,甚至连80端口都可以支持多个网站,分别对应不同的域名和主目录,只需要不断添加server块即可。

四、配置反向代理

在location字段中进行设置。如要将整个域名都反向代理:

server {
	listen 443 ssl;
	server_name WEBSITE;
	ssl_certificate /root/ssl/WEBSITE/file.pem;
	ssl_certificate_key /root/ssl/WEBSITE/file.key;
	location / {
		proxy_pass ANOTHER_WEBSITE_URL;		
	}
}

location /后面还可以跟目录,以实现不同路径反向代理到不同的地址。例如:

location /app {
proxy_pass APP_WEBSITE_URL; 
}

需要注意的是,全站反向代理时,不需要与try_files $uri $uri/ =404;写在一起,否则会优先执行try_files,导致出现不期望的结果。

五、应用nginx配置

nginx -s reload
nginx -s stop
nginx

即可重新加载配置文件并重启nginx。