将原本在Apache上运行的Redmine迁移到Nginx的计划

背景和概要

起初我们使用Apache来运行Redmine,但出于兴趣我尝试了一下切换到了Nginx。
趁换过去的机会,我也顺便添加了SSL通信支持。
我本以为只需要将Nginx配置为读取/var/lib/redmine目录就可以了,
但后来发现为了与Passenger进行协作需要重新编译Nginx。
原因如下所述。
为什么Phusion Passenger无法扩展我现有的Nginx?
简单来说,Nginx并不(很好地)支持动态模块加载,
如果要与第三方工具进行协作,就必须重新编译并以静态方式加载。
相比可以动态加载模块的Apache,Nginx在灵活性上似乎有所不足,
但这也正是它能够实现高速运行的原因吧。

规格

    • CentOS 7.3

 

    • Redmine 3.3.3

 

    • Postgresql 9.2.18

 

    • Ruby 2.3.3

 

    • Rails 4.2.7

 

    ホスト名 www.hogehoge.com
旧構成新構成Apache 2.4.6Nginx 1.10.2SSLなしSSLあり

安装Nginx

执行包含乘客的Nginx安装程序。

# passenger-install-nginx-module --auto

与通过yum安装不同,供应商提供的应用程序将被安装在/opt目录下。

权限变更

# chown -R nobody:nobody /opt/nginx
# chown -R 755 /opt/nginx

契约.

修改nginx服务的配置

创建systemd的unit文件。如果已经通过yum等方式安装了,只需编辑几行即可。将原先nginx配置文件所在的/etc/nginx部分替换为新的/opt/nginx。

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but hasthe  wrong
# SELinux context. This might happen when running `nginx -t` from the  cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

应用编辑内容并启动nginx服务,并设置自动启动。

# systemctl daemon-reload
# systemctl start nginx
# systemctl enable nginx

SSL支持

证书是根据樱花知识的文章参考,在LetsEncrypt上颁发的。
由于在21世纪,将所有的Web访问协议都加密为HTTPS是时尚的做法,所以我们决定将对80号端口的访问全部重定向到443号端口。

顺便说一下,那时候发生了一个小麻烦。我误以为在Nginx上的重定向失败了。

首先,确认乘客位置的设置如下。

# passenger-config --root

在我所处的环境中,
在我所处的情况下,
在我的环境里,
根据我所在的环境,
依据我周围的环境,

/usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.1.4

被标注为。

在HTTP上下文的开头添加以下5行。

http {
    user nobody;
    pid /opt/nginx/logs/nginx.pid;
    passenger_root /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.1.4;
    passenger_ruby /usr/local/bin/ruby;
    include /opt/nginx/conf/conf.d/*.conf;
    ...
}

接下来,将服务器上下文修改为以下方式。

server {
        listen 80;
        server_name www.hogehoge.com;
        return 301 https://$host$request_uri;
        }

设置等待通过443端口进行SSL通信。


server {
        listen 443 ssl;
        server_name www.hogehoge.com;
        root  /var/www/html/;
        ssl_certificate       /path/to/your/cert.pem;
        ssl_certificate_key    /path/to/your/privkey.pem;
        ...
        }

通过浏览器访问http://www.hogehoge.com/,将会被重定向到https://www.hogehoge.com/,并读取宿主操作系统下的/var/www/html/目录及其内容。

与Redmine的整合

https://www.hogehoge.com/redmine/でアクセスできるようにする.
/var/lib/redmine 以下にコンテンツが配置してあるとする.

将Redmine相关文件的所有者更改为nginx用户。

# chown -R nginx:nginx /var/lib/redmine

在SSL通信的配置文件中,添加以下内容:

http {
    listen 443 ssl;
    ...
+   proxy_set_header Host $host;
+   proxy_set_header X-Real-IP $remote_addr;
+   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+   proxy_set_header X-Forwarded-Server $host;
+   proxy_set_header X-Forwarded-Host $host;

    server {
        listen 443 ssl;
        server_name www.hogehoge.com;
        root  /var/www/html/;
        ssl_certificate       /path/to/your/cert.pem;
        ssl_certificate_key    /path/to/your/privkey.pem;
        ...

+       location ~ ^/redmine {
+            passenger_base_uri /redmine;
+            passenger_app_root /var/lib/redmine;
+            passenger_enabled on;
+            rails_env production;
+            access_log  /var/log/redmine_access.log;
+            error_log   /var/log/redmine_error.log;
        }
    ...
    }
    ...
}

如果能够通过浏览器访问https://www.hogehoge.com/redmine/并且显示如下内容,那就可以了。

Redmine.png

上面提到的。
這次想在HTTPS後面運行Docker容器,
嘗試創建一個安全的WebHook。

请提供更多的上下文或要求,以便我可以为您提供一个恰当的翻译。

    • CentOS7にRedmineをインストールし、nginxのサブフォルダで公開する。

 

    Redmine 3.3をCentOS 7.3にインストールする手順
广告
将在 10 秒后关闭
bannerAds