使用 nginx 来为 Wordpress 加 SSL 的问题

2023-03-08 13:20:27 +08:00
 dangyuluo

我有一个 Docker 服务跑着 Wordpress ,域名假设是 wp.name.com ,使用 HTTP ,无 HTTPS 。为了使用 SSL ,再另一个 docker 容器里跑了个 nginx ,监听 443 端口然后反向代理了

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

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/nginx/certs/yourdomain.com.crt;
    ssl_certificate_key /etc/nginx/certs/yourdomain.com.key;

    location / {
        proxy_pass http://<wordpress-ip>:80;
        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-Proto $scheme;
    }
}

https://wp.name.com打开网页是没问题了,但是 Wordpress 使用的静态文件还是在 HTTP 上,因此加载失败。请问这种情况有什么好办法么?谢谢

1327 次点击
所在节点    NGINX
11 条回复
julyclyde
2023-03-08 13:22:18 +08:00
我记得 wordpress 里给出的静态资源好像都是绝对路径
所以需要改一遍数据库
Kinnice
2023-03-08 13:22:51 +08:00
`UPDATE wp_posts SET post_content = replace( post_content, 'http 域名','https 域名');`
leaflxh
2023-03-08 13:28:39 +08:00
改一下 80 升级 443 的逻辑?

server {
listen 80;
server_name www.域名.com;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}

查询自 https://blog.csdn.net/zhuchunyan_aijia/article/details/121374258
lanternxx
2023-03-08 13:31:47 +08:00
先在 wordpress 管理后台的设置里把站点地址和站点 URL 改成 https 的试试,不行的话就要按楼上的刷数据库了
leaflxh
2023-03-08 14:42:05 +08:00
以下配置未复现:

docker-compose.yaml:

version: '3.1'
services:

wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html

db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql

volumes:
wordpress:
db:

nginx 配置:

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

server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert/example.com/cert.crt;
ssl_certificate_key /etc/nginx/cert/example.com/cert.key;
client_max_body_size 1G;
client_body_buffer_size 16M;
location / {
proxy_pass http://127.0.0.1:8080;
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-Proto $scheme;
}
}
xuanbg
2023-03-08 14:53:02 +08:00
简单反代一下不行吗?当然如果图片 url 是绝对路径的话,那肯定要在数据库里面把 http 替换成 https 才行。
r00t7
2023-03-08 15:03:18 +08:00
dangyuluo
2023-03-08 16:35:34 +08:00
@r00t7 谢谢 Nginx Proxy Manager 好用
r00t7
2023-03-08 17:38:19 +08:00
@dangyuluo 主要是最后的内容

/**请求标头告知**/
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
kingfalse
2023-03-08 22:46:54 +08:00
lnmp 一把梭子搞定
dangyuluo
2023-03-09 03:08:44 +08:00
@r00t7 其实我没加这个也好用。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/922219

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX