Table of Contents
WordPress URLs point actual server behind NGINX
NGINX did not translate URL correctly
When accessing server via NGINX, it didn't translate URLs in page to the URL accessing.
For example, the URL is https://example.com/sample.html, the server behind is https://192.168.1.11/sample.html, the NGINX is still leaving it without translating.
I have done following, but not useful
- Updated both options
siteurl
andhome
in database
update wp_options set option_value='http://newhost:8080' where option_name='siteurl';
update wp_options set option_value='http://newhost:8080' where option_name='home';
- Added host and port in wp_config.php
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_PORT'];
}
Someone suggested following lines as well, but I didn't do it.
define('WP_HOME','https://test.com/blog/');
define('WP_SITEURL','https://test.com/blog/');
- Updated NGINX configuration.
proxy_pass http://newhost
Solution
Modify NGINX configuration
Configure https
server {
server_name blog.bianxi.com;
# SSL configuration
listen 443 ssl;
ssl_certificate conf.d/www.bianxi.com.crt;
ssl_certificate_key conf.d/www.bianxi.com.key;
location / {
proxy_pass 'http://192.168.1.14:8080';
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Proxy "";
}
}
Configure http redirect
server {
listen 80;
server_name blog.bianxi.com;
return 301 https://$host$request_uri;
}
Config wp-config.php
Add following lines in wp-config.php
//$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/", $_SERVER['REQUEST_URI']);
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
define('WP_HOME','https://blog.bianxi.com/');
define('WP_SITEURL','https://blog.bianxi.com/');
}
If change URL is required
Change location in NGINX configuration file, and the URL replace were used if requires changing of URL as well in wp-config.php file.