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

前言

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

备份快照

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

停用apache服务

$ systemctl stop httpd.service 
$ systemctl disable httpd.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

安装nginx

导入yum源

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

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

$ systemctl enable nginx.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
$ systemctl start nginx.service

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

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

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

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 

配置nginx

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

查看版本

配置https

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

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

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

编辑配置文件:

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

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

# 执行进程操作的用户,默认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服务,就能查看到博客已经可以正常工作了。