个人博客web服务器换用nginx

记录一下个人博客的web服务器从apache换成nginx的过程。

0、前言

关于apache和nginx的对比有很多,小七就不在这里赘述了,之前大一搭建博客的时候还没有接触过nginx就用了apache,后来考RHCE的时候也学习配置的是apache,最近开始学习nginx,考虑到对于小七自己的静态博客和渣渣服务器性能来说,nginx应该更合适一些,因此这里就把web服务器换成了nginx。

1、备份快照

在阿里云的官网控制台里面创建快照备份。如果不小心翻车了,还能用快照恢复。

2、停用apache服务

1
2
3
[root@aliyun ~]# systemctl stop httpd.service 
[root@aliyun ~]# systemctl disable httpd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

3、安装nginx

3.1 导入yum源

1
2
3
4
5
6
7
8
9
10
11
cat >> /etc/yum.repo.d/nginx.repo << EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/x86_64/
gpgcheck=0
enabled=1
EOF

yum clean all
yum repolist
yum install nginx -y

这里小七使用的是nginx提供的yum源,因此版本可能会稍微新一点。

想要安装最新版的同学可以前往官网下载源码进行编译安装。

官网地址:http://nginx.org/en/download.html

3.2 启用nginx服务并设置开机启动

1
2
3
[root@aliyun ~]# systemctl enable nginx.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@aliyun ~]# systemctl start nginx.service

访问服务器IP。可以看到nginx已经开始工作。

这里有可能会出现Failed to read PID from file /run/nginx.pid的错误

原因是nginx还没有完全启动,systemd就去读取该进程的PID导致无法读取报错,解决方法是让systemd晚一点读取。

1
2
3
4
5
6
7
8
9
10
11
mkdir /etc/systemd/system/nginx.service.d

cat >> /etc/systemd/system/nginx.service.d/override.conf << EOF
[Service]
ExecStartPost=/bin/sleep 0.1
EOF

# 重启服务再次查看
systemctl daemon-reload
systemctl restart nginx.service
systemctl status nginx.service

4、配置nginx

由于小七安装的版本里面的配置文件默认并没有nginx的web的相关配置,所以我们一次把httphttpshttp自动跳转https配好。

4.1 查看版本

4.2 配置https

从申请ssl认证的供应商那里下载nginx服务器对应的https认证证书,并存放在/etc/pki/CA/certs目录下。(如果没有就新建该目录)

如果不知道怎么申请的可以查看这篇博客:

阿里云轻量级应用服务器CentOS系统Apache配置Https

4.3 编辑配置文件:

这里小七直接放出整个配置文件给大家参考:

默认的配置文件位于/etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 执行进程操作的用户,默认nginx
user nginx;
# 这里的数字最好设置成和自己服务的核心数一样
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


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

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

# Settings for a TLS enabled server.
# 这里我们把80和443端口一起配置
server {
listen 80 default_server;
listen 443 ssl;
listen [::]:443 ssl;
# 这里填写自己的域名
server_name tiny777.com www.tiny777.com;
# 判断端口,如果是http的80端口就跳转到https的443端口
if ($server_port = 80) {
#return 301 https://$server_name$request_uri;
return 301 https://$host$request_uri;
}
# 这里是对应的html文件的目录
root /etc/nginx/html;
index index.html index.htm;

# 这里是https证书的密钥和证书存放位置
ssl_certificate "/etc/pki/CA/certs/tiny777.com.pem";
ssl_certificate_key "/etc/pki/CA/certs/tiny777.com.key";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
# 这里是支持的加密方式
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
root /etc/nginx/html;
index index.html index.htm;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

}

最后我们重启nginx服务,就能查看到博客已经可以正常工作了。