最佳实践:使用 nginx 为多个前端项目搭建web服务器

介绍

最佳实践:使用 nginx 为多个前端项目搭建web服务器。

详细nginx配置,防火墙、文件权限、日志等配置请自行查阅。

项目

项目目录:

text
/home/ubuntu/
├─ project1/
└─ project2/

项目各自首页:/dist/index.html

域名:example.com,项目1:site1.example.com,项目2:site2.example.com

nginx配置

为每个项目创建独立的配置文件,放在 /etc/nginx/sites-available/ 目录下,并创建软链接到 /etc/nginx/sites-enabled/ 下。

nginx.conf 配置文件中将 sites-enabled 目录下的配置文件引入。

下面使用两个网站作为示范,项目2使用ssl证书,可使用https访问。

text
/etc/nginx/ # nginx目录
├─ sites-available
│  ├─ site1.example.com.conf
│  └─ site2.example.com.conf
├─ sites-enabled
│  ├─ site1.example.com.conf # ./sites-available/site1.example.com.conf 的软链接
│  └─ site2.example.com.conf # ./sites-available/site2.example.com.conf 的软链接
├─ example.com.key # ssl证书
├─ example.com.pem # ssl证书
└─ nginx.conf
nginx
http {
	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}
nginx
server {
	listen 8000;
	listen [::]:8000;

	server_name site1.example.com;

	root /home/ubuntu/project1/dist;
	index index.html index.htm;

	location / {
		try_files $uri $uri/ /index.html;
	}
}
nginx
server {
	listen 443 ssl;
	listen [::]:443 ssl;
	server_name site2.example.com;
	ssl_certificate /etc/nginx/site2.example.com.pem;
	ssl_certificate_key /etc/nginx/site2.example.com.key;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers on;

	root /home/ubuntu/site2/dist;

	location / {
		index index.html index.htm;
		try_files $uri $uri/ /index.html;
	}
}

server {
	listen 80;
	listen [::]:80;

	server_name site2.example.com;

	# rewrite ^(.*) https://$server_name$1 permanent;

	root /home/ubuntu/site2/dist;
	index index.html index.htm;

	location / {
		try_files $uri $uri/ /index.html;
	}
}